#define宏定义和const及enum枚举的区别

#define p 10

const int p=10;

enum p

{a;

b;

}k;

enum简单扩展:

a和b成为枚举元素或者枚举常量,编译器会对他们按定义的顺序赋值为1,2,3,........

k为枚举变量,它的值是可以输出的。但是不能对枚举变量直接赋予一个整值,必须进行类型强转才能赋。

例如k=(p)2;这个语句的意思是将枚举元素顺序号为2的元素赋值给k,相当于k=b;


(1)编译器处理方式不同

#define是在预处理阶段对所定义的常量进行替换展开;

const是在编译运行阶段使用;

enum是程序运行时起作用;


(2)分配内存不同

#define宏定义仅仅是替换和展开,并不进行内存的分配(宏定义不分配内存,常量的定义分配内存);

const常量编译器会分配内存,在堆或者栈;

enum常量存储在内存数据段的静态存储区。

延伸:在C语言里,const的含义是被称为一个不能被改变的普通变量,而在C++中其含义就不尽相同。C++中的const常量,C++编译器都会尽量避免const 常量的内存分配,只有当不得已的时候才会分配具体的内存空间给const变量。

例子

(1)

由反汇编代码看出j的值是从a的内存空间中取出值赋给j的存储空间;

(2)


由const定义的常变量的值是直接赋给j的存储空间,而不对其值进行存储,放在常量表中或是直接使用其值。

(3)类型检查

#define宏定义没有类型检查和安全检查,所以会导致边际效应,出现不可预知的错误;

const在编译阶段进行类型检查和安全检查;

enum在编译阶段进行类型检查,但是只能进行整形的定义;












猜你喜欢

转载自blog.csdn.net/qq_40340448/article/details/78166149
今日推荐