免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4332 | 回复: 17
打印 上一主题 下一主题

为什么要用enum [复制链接]

论坛徽章:
1
15-16赛季CBA联赛之吉林
日期:2018-05-23 14:31:12
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-29 17:45 |只看该作者 |倒序浏览

  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>

  4. enum { ARR_LEN = 100};

  5. int
  6. main (void)
  7. {
  8.     int i;
  9.     *pNumber = malloc(ARR_LEN * sizeof(int));

  10.     if ( pNumber == NULL) {
  11.         fprintf (stderr, "Insufficient memory.\n");
  12.         exit(1);
  13.     }
  14.     srand( (unsigned) time(NULL) );

  15.     for (i = 0; i < ARR_LEN; ++i)
  16.         pNumber[i] = rand() % 10000;

  17.     printf ("\n%d random numbers between 0 and 9999: \n", ARR_LEN);
  18.     for ( i = 0; i < ARR_LEN; ++i) {
  19.         printf ("%6d", pNumber[i]);
  20.         if ( i % 10 == 9 )
  21.             putchar('\n');
  22.     }
  23.     free(pNumber);
  24.     return 0;
  25. }

复制代码


里面的
  1. enum { ARR_LEN = 100}
复制代码

这为什么要用枚举呢??
我把它定义为
  1. #define  ARR_LEN  100
复制代码

也没错啊
把它定义为一个变量也是可以的啊,在这里用枚举是不是有特别意义呢??

[ 本帖最后由 gtuiw 于 2007-9-29 17:48 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-09-29 17:55 |只看该作者
想用他就用了

论坛徽章:
0
3 [报告]
发表于 2007-09-29 17:56 |只看该作者

论坛徽章:
0
4 [报告]
发表于 2007-09-29 17:56 |只看该作者
原帖由 gtuiw 于 2007-9-29 17:45 发表

#include
#include
#include

enum { ARR_LEN = 100};

int
main (void)
{
    int i;
    *pNumber = malloc(ARR_LEN * sizeof(int));

    if ( pNumber == NULL) {
        fprintf (stde ...



如果是单个,确实不比define好, 但是如果定义多个连续的常量,就比define优越的多

论坛徽章:
0
5 [报告]
发表于 2007-09-29 18:32 |只看该作者
原帖由 gtuiw 于 2007-9-29 17:45 发表
这为什么要用枚举呢??
我把它定义为
#define  ARR_LEN  100
也没错啊

再C++中枚举和#define定义得作用域好像不一样把,我刚开始学C++
在C++编程思想中文版 133页有介绍,不知道对你有用没。
说错了欢迎指正

论坛徽章:
0
6 [报告]
发表于 2007-09-29 21:11 |只看该作者
Most compilers will allocate the smallest unit of memory the CPU can efficiently access in order to represent an enumerated type.
            --"Write Great Code Vol. 2"

[ 本帖最后由 jronald 于 2007-9-29 21:14 编辑 ]

论坛徽章:
1
15-16赛季CBA联赛之吉林
日期:2018-05-23 14:31:12
7 [报告]
发表于 2007-09-29 22:03 |只看该作者
感谢你们的回复,我又长了知识了

[ 本帖最后由 gtuiw 于 2007-9-30 18:57 编辑 ]

论坛徽章:
1
15-16赛季CBA联赛之吉林
日期:2018-05-23 14:31:12
8 [报告]
发表于 2007-09-29 22:05 |只看该作者
原帖由 jronald 于 2007-9-29 21:11 发表
Most compilers will allocate the smallest unit of memory the CPU can efficiently access in order to represent an enumerated type.
            --"Write Great Code Vol. 2"


还想问你一下,为什么在程序里用的#define比enum多很多呢??

论坛徽章:
0
9 [报告]
发表于 2007-09-30 09:40 |只看该作者
原帖由 gtuiw 于 2007-9-29 22:05 发表


还想问你一下,为什么在程序里用的#define比enum多很多呢??


被#define的值,与const变量相比,优点是不占内存,不需初始化,缺点是没有作用域类型等,另外,两者都可以直接编码到指令里面


#define OneThousand 1000
i=OneThousand变为
mov ebx,_i   ;ebx存i的地址
mov [ebx],1000

#define比较通用吧,字符串也行,同时也比较野蛮,呵呵

[ 本帖最后由 jronald 于 2007-9-30 09:49 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2007-09-30 11:29 |只看该作者
但是enum 的宽度 有定义吗? 还是define 好。 没有移植问题
#defien  xxxUL
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP