枚举与宏的区别

枚举:

枚举是一种变量类型,枚举基本等效于int类型,占用同样的空间,同样的数值范围,但是枚举通常都是表示常数变量,对枚举变量做一些算术计算通常是编译器不允许的,但是可以加上强制类型转换,本来不在枚举符表里面的值也可以大摇大摆的登堂入室,枚举符表甚至允许数值相等。在没有赋值的引用中,只会是int范围内的垃圾数值,根本就不会是枚举符表中的数值。对于默认的情况,enum符表从0开始计数,除非用=赋值,否则就是前项的+1。使用枚举类型的最大好处是使得程序可读性增强!!

宏:

宏定义只是在程序的开头定义了一个字符常量,它并不分配内存空间,所以根本不占用内存,它只是在程序预编译的时候,给常量赋一个固定的值,当程序中遇到这个字符常量时就会知道它就是预编译时被赋的那个值,代入运算就可以了,这个值在程序中是不能被改变的,只有在宏定义中才能改变,改变了之后,程序中所以出现此常量的地方都会改变,所以这就给写程序带来了方便,但宏永远仅仅只是编译器的代码替换功能,如果用的好却可以做出来那么华丽丽的效果,但要是用不好就是自己打自己的脸了!

枚举常量与宏的主要区别:
1.枚举常量是实体中的一种,但宏不是实体;
2.枚举常量属于常量,但宏不是常量(字符常量);
3.枚举常量具有类型,但宏没有类型,枚举变量具有与普通变量相同的诸如作用域、值等性质,但宏没有,宏不是语言的一部分,它是一种预处理替换符。枚举类型主要用于限制性输入,例如,某个函数的某参数只接受某种类型中的有限个数值,除此之外的其它数值都不接受,这时候枚举能很好地解决这个问题。能用枚举尽量用枚举,否则在调试的时候你是看不到当时的值的。
4.用宏去定义一个变量如果你定义了一个相同的变量那么要看谁在前面,如果宏在前面变量会产生编译错误,而且这个错误很难查找,如果那个宏隐藏的很深的话。如果你定义的变量在前那么更可怕了,直接没有错误,但是宏定义被自定义的变量悄悄替换了。用枚举定义的话不管你定义的顺序前后关系怎样都会产生重复定义的错误。从上面的举例来看枚举比宏好用的多。宏还有一个特性是没有作用域,这里的作用域是指宏定义以后的代码都可以使用这个宏。宏可以被重复定义这个可能导致宏的值被修改。所以建议不要用宏去定义整形的变量,用枚举或者const。又会有用const还是枚举呢,世界一向如此纠结,枚举只能表示整形,const可以修饰任何类型。整形的情况下如果你要定义几种有关系的数值那么用枚举,否则用const。

5.枚举可以一次定义大量相关的常量,而宏只能定义一个。

6.枚举和宏的作用时间和存储形式不同。

你可能感兴趣的:(枚举与宏的区别)