首页 > 试题广场 >

下列关于CC++的宏定义的说法中,不正确的是:

[单选题]
下列关于C/C++的宏定义的说法中,不正确的是:
  • 宏定义的常量更容易理解,如果可以使用宏定义常量的话,要避免使用 const常量
  • 宏的嵌套定义过多会影响程序的可读性,而且很容易出错
  • 相对于函数调用,宏定义可以提高程序的运行效率
  • 宏定义不检查参数正确性,这样会有安全隐患
推荐
宏定义由预编译器来处理,当你定义一个记号#define RATIO 1.652时,RATIO可能从未被编译器看到,而直接被预处理其移走了,如果你的定义是#define RATIO ,在预处理进行一个宏替换的时候,由于你调用地方的特殊性,你会获得一个莫名奇妙的错误,但是如果你使用的const double RATIO = 1.652,当你没有初始化这个变量,则在这个变量出错地方编译器将给出错误信息,可以方便程序设计者很快的找出错误所在。这就是在effective C++中作者所说的尽量以const enum inline 替换define 条款。
编辑于 2016-11-06 10:29:31 回复(2)
根据effective C++ 中条款03 中,尽可能使用Const ,将某些东西声明为const可帮助编译器侦测出错误方法,const 可以被施加于任何作用于内的对象,函数参数,函数返回类型,成员函数本体。
另外:
宏定义的常量是在预处理阶段展开,const常量是在编译运行阶段使用
宏定义的常量没有类型,不做任何类型检查;const常量是有具体类型的,在编译运行阶段会做类型检查.
为了代码健壮性起见,还是尽量使用const,故 A是错的
编辑于 2016-10-29 15:36:58 回复(1)
宏定义没有进行语法检查,单纯地在编译的时候进行替换,很容易出错。
发表于 2015-08-12 11:38:17 回复(0)

使用const比使用define有一下几种好处:

(1)const会进行数据类型检查,而define不会


(2)const效率高,因为const定义的常量,没有在内存中存储,而是在符号表中,每次访问这个数据的时候,少了从内存中读取和存储过程,效率高。

因此尽量还是使用const常量

发表于 2017-04-29 19:56:59 回复(0)
应该多使用const常量,而避免使用宏定义
发表于 2015-08-09 09:57:21 回复(0)
const 相比define 而言,还定义了常量的类型 ,而define 只是做了一些简单的文本替换 ,所以const 的出错率要比define 小些。 
编辑于 2015-08-09 10:35:49 回复(1)
const会进行数据类型检查,而define不会。 const效率高,因为定义的常量,没有在内存中存储,而在符号表中,每次访问这个数据时,少了从内存中读取和存储的过程,效率高。
发表于 2022-01-15 00:21:05 回复(0)
effective c++条款02:尽量以const,enum,inline替换#define;
最近刚好再看这本书,看到A选项直接秒选,有疑惑的同学可以直接去看看那本书,讲的挺好的
编辑于 2017-09-13 22:16:17 回复(0)

使用const比使用define有一下几种好处:

(1)const会进行数据类型检查,而define不会


(2)const效率高,因为const定义的常量,没有在内存中存储,而是在符号表中,每次访问这个数据的时候,少了从内存中读取和存储过程,效率高。

因此尽量还是使用const常量

发表于 2021-11-30 09:04:20 回复(0)
a项刚好相反,尽量多const,少宏定义
发表于 2020-02-08 09:46:52 回复(0)
const定义的为只读变量,在内存中只保留了一个副本,define进行单一替换,不涉及到编译检查。const应该更值得推荐些的。
发表于 2015-08-09 12:19:19 回复(1)
A:宏定义没有语法检查
发表于 2015-08-09 10:49:14 回复(0)
一、优点 提高代码的可读性,方便修改。提高程序的运行效率:使用带参数的宏既代替了函数的功能,有避免了函数入栈和出栈操作,减少了系统的开销,提高了运行的效率。 二、缺点 1.由于使用宏的时候,只是进行简单的字符替换,不会对类型进行检查,存在安全隐患。 2.由于宏是直接替换的,所以会导致代码稍微长一点。 3.嵌套定义过多可能会影响程序的可读性,会容易出错。 4.边界效应。由于宏定义的时候,其各个分量未加括号,而在使用宏定义的时候,传递的参数是变量的表达式,然后经过系统展开后,由于优先级的原因,导致其结果不是你所希望的
发表于 2023-07-14 20:58:21 回复(0)
宏定义不检查参数正确性,这样会有安全隐患; const常量是有具体类型的,在编译运行阶段会做类型检查. 为了代码健壮性起见,还是尽量使用const,

发表于 2022-08-16 15:28:55 回复(0)
宏定义的常量是在预处理阶段展开,const常量是在编译运行阶段使用
宏定义的常量没有类型,不做任何类型检查;const常量是有具体类型的,在编译运行阶段会做类型检查.
为了代码健壮性起见,还是尽量使用const。
发表于 2022-04-29 16:10:37 回复(0)
Vss头像 Vss
用非宏语言容易检查错误
发表于 2021-04-10 00:18:21 回复(0)
const进行类型检查,更安全
发表于 2015-08-10 20:37:03 回复(0)