枚举和宏的区别

摘要:
使用枚举类型的最大优点是增强程序的可读性!!枚举常量和宏的主要区别是:1.枚举常量是实体之一,但宏不是实体;2.枚举常量是常量,但宏不是常量;3.枚举常量有类型,但宏没有类型。枚举变量具有与普通变量相同的属性,例如范围、值等,但宏没有。宏不是语言的一部分。它们是经过预处理的替代品。从上面的示例中,枚举比宏更容易使用。

枚举:

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

宏:

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

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

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

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

免责声明:文章转载自《枚举和宏的区别》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇java jdb命令详解使用gitlab runner进行CI(三):使用sonarqube做c++的静态检查下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Delphi 文件操作资料

var file_name:string; file_name:='c:\luther.gliethttp.txt'; FileWrite(com.log_fd, PChar(file_name)^, length(file_name)); 文件是同一种类型元素的有序集合,是内存与外设之间传输数据的渠道。文件的本质是一个数据流,所有的文件实际上是一串二进...

php变量类型及几个常用的打印方式

变量的数据类型: 1,标量类型:int (整型),float(浮点型),boolean(布尔型),string(字符串型) 2,复合类型:array(数组),object(对象) 3,特殊类型:null(空),resource(资源) 几个常用的打印方式: 1,echo输出一个或多个字符串,他是PHP语句,不是函数,所以他没有返回值 <?php...

Linux高级编程--04.GDB调试程序(查看数据)

查看栈信息 当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的。当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入“栈”(Stack)中。你可以用GDB命令来查看当前的栈中的信息。 下面是一些查看函数调用栈信息的GDB命令: backtrace / bt :打印当前的函数调用栈的所有信息。如: (gdb) bt #0...

C#中out的用法

out的用法out关键字会导致参数通过引用来传递。这与ref关键字类似,不同之处在于ref要求变量必须在传递之前进行初始化。若要使用out参数,方法定义和调用方法都必须显式使用out关键字。例如: classOutExample { static void Method(out inti) { i = 44; }...

FreeMarker语法

向原作者致敬,原文地址http://www.cnblogs.com/linjiqin/p/3388298.html FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{expr}或#{expr;format} ${book.name?if_exists } //用于判断如果存在,就输出这个值 ${book.name...

php函数内不能访问函数外的变量原因

php函数内不能访问函数外的变量原因   执行如下代码, $i = 10; function my(){  echo $i;  } my(); xdebug显示是:Undefined variable 这个问题,即函数内部不可以访问外部的变量,如果想访问,如上,则在函数内部加 global $i。 用户在php中定义的变量都可以在一个HashTable...