首页 > 试题广场 >

下列关于CC++的宏定义,不正确的是()

[单选题]
下列关于C/C++的宏定义,不正确的是()
  • 宏定义不检查参数正确性,会有安全隐患
  • 宏定义的常量更容易理解,如果可以使用宏定义常量的话,要避免使用const常量
  • 宏的嵌套定义过多会影响程序的可读性,而且很容易出错
  • 相对于函数调用,宏定义可以提高程序的运行效率
NII头像 NII
使用const比使用define有一下几种好处:
(1)const会进行数据类型检查,而define不会
(2)const效率高,因为const定义的常量,没有在内存中存储,而是在符号表中,每次访问这个数据的时候,少了从内存中读取和存储过程,效率高。
因此尽量还是使用const常量
发表于 2015-09-19 10:52:15 回复(5)
#define M 3    //宏常量
const int N = 5;//此时并未将N放入内存中,保存在符号表中
......
int i=N;//此时为N分配内存,以后不再分配!
int I=M;//与编译期间进行宏替换,分配内存
int j=N;//没有分配内存
int J=M;//再进行宏替换,又一次内存分配
const只读变量(c语言里是常量)只是给出了对应的内存地址,#define定义给出的是立即数,每次替换都必须进行拷贝。

发表于 2015-10-05 20:58:29 回复(2)
const与#define最大的差别在于:前者在堆栈分配了空间,而后者只是把具体数值直接传递到目标变量罢了。或者说,const的常量是一个Run-Time的概念,他在程序中确确实实的存在可以被调用、传递。而#define常量则是一个Compile-Time概念,它的生命周期止于编译期:在实际程序中他只是一个常数、一个命令中的参数,没有实际的存在。

const常量存在于程序的数据段.

#define常量存在于程序的代码段。
发表于 2017-09-19 09:42:03 回复(0)
const关键字定义常量比宏更安全 
发表于 2015-09-19 14:19:21 回复(0)
//尽量以const替换 #define
//#define  APSECT_RATIO 1.653;
//为何不使用宏:因为记号APSECT_RATIO也许从未被编译器看见;也许在编译器开始处理源代码
//之前它就被预处理器移走了。于是记号名称APSECT_RATIO有可能没有进入记号表(symbol table)
//于是当我们运用此常量但获得一个编译错误信息时,可能会带来疑惑,因为这个错误信息会提到1.653
//而不是APSECT_RATIO。

const double ApsectRatio=1.653;//改为使用const 常量,ApsectRatio肯定会被编译器看见,当然就会进入记号表

发表于 2016-08-19 16:59:25 回复(0)
const类型会进行数据类型的检查,而define不会,相比较define,const的效率高

发表于 2019-02-28 19:17:25 回复(0)
只是很好奇“
相对于函数调用,宏定义可以提高程序的运行效率
这句话正确吗?宏定义就是替换,哪里比调用函数快了。
发表于 2018-04-06 19:52:11 回复(0)
《Effective C++》第一条
1. 尽量用const和inline, 而不用#define
发表于 2017-12-15 10:12:05 回复(0)
const毕竟要检查一次,宏定义只是换换代码,搞不好就弄个没想到的结果,所以少用得好,除非你已经精确细致的看过了,但是浪费时间啊,我们还有更多的代码要撸,不能为这点小代码浪费时间。。。
发表于 2016-11-14 15:13:52 回复(0)
应该多是多用const,少用宏定义
发表于 2016-10-31 21:46:41 回复(0)
这题我居然错了,白看了《Effective C++》了,尽可能使用const、enum 、inline代替宏
发表于 2016-08-05 13:58:38 回复(0)
const定义的常量,没有在内存中存储,而是在符号表中,每次访问这个数据的时候,少了从内存中读取和存储的时间,效率更高。
发表于 2016-05-19 13:45:04 回复(0)
可以用const的地方还是应该尽量使用const
发表于 2016-03-29 10:36:15 回复(0)
B
编辑于 2015-11-22 15:12:15 回复(0)