#defineA50constintB=40;staticintarray[A];//正确staticintarray2[B];//错误constintC=2*A;//正确constintD=2*B;//错误intmain(){}疑惑const定义常量是不是发生在编译时,所以在程序预处理阶段不能对数组大小进行初始化或者对值进行初始化,而#define宏发生在预处理阶段,可以用实体对数组大小初始化时出现的宏进行宏展开。我这样理解对吗望更详细的补充
2 回答
BIG阳
TA贡献1859条经验 获得超6个赞
你理解的是正确的。define这个是预处理命令,编译器会自动展开。在编译器进行编译的时候,intarray[A]已经被预处理展开成intarray[50]了。而被const修饰的变量还是变量,只是这个变量放在一个只读的数据段里面。另外,在预处理阶段不能对数组大小进行初始化是不完全对的。如果说你使用gcc编译器的话,像inta=255;charb[a];这样是可以通过编译的。
梵蒂冈之花
TA贡献1900条经验 获得超5个赞
define只是简单的替换,在编译前就完成所有替换。const只是修饰符相当于权限限制符,表明在程序运行时这个值是常量,但是在c和c++中处理都不一样,c中const只是简单的告诉编译器这是常量,但是在后面的使用中还是可以隐式修改。而c++中的const则在程序中始终都是常量,不可以被隐式修改!
添加回答
举报
0/150
提交
取消