下列关于const和#define定义常量的区别,说法不正确的有()
A. define宏是在预处理阶段展开。const常量是编译运行阶段使用
B. 宏没有类型,不做任何类型检查,仅仅是展开。const常量有具体的类型,在编译阶段会执行类型检查
C. define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。const常量会在内存中分配(可以是堆中也可以是栈中)
D. const定义和#define定义的常量在程序运行过程中只有一份拷贝
const定义的常量只有一次拷贝没错,而define定义的变量在内存中并没有拷贝,因为所有的预处理指令都在预处理时进行了替换。
对于 #define 定义的宏,它在预处理阶段进行文本替换,所以在代码中出现多少次,就会被展开多少次,不会有单一的拷贝。而 const 常量在某些情况下可以被优化为单一的拷贝,但它的数量和位置仍然取决于编译器的优化策略。因此 const 常量的行为也可能导致多于一份拷贝。
#define
const
D
[解析]
A,正确...
用户登录可进行刷题及查看答案
A,正确,#define定义的宏是在预处理阶段进行替换的,const常量是在编译、运行阶段进行使用的。
注意是仅仅的字符串替换,并不会检查其合法性。
预处理阶段做了的任务: 1:将头文件中的内容(源文件之外的文件)插入到源文件中 2:进行了宏替换的过程(简单的字符串替换),定义和替换了由#define指令定义的符号 3:删除掉注释的过程,注释是不会带入到编译阶段 4:条件编译
B,正确,所有的宏替换只是简单的字符串替换,注意是字符串替换,所以并不会检查其合法性,而const定义的常量依然是内置类型等,所以会对其进行类型安全检查。
C,正确,宏定义在程序中使用了几次在预处理阶段就会被展开几次,并不会增加内存占用,但是宏定义每展开一次,代码的长度就要发生变化(所以有利必有弊啊!),而const常量也会为其分配内存(如果是动态申请空间肯定就是堆中了)。
D,错误,const定义的常量只有一次拷贝没毛病,而define定义的变量在内存中并没有拷贝,因为所有的预处理指令都在预处理时进行了替换。
登录后提交答案