vis*_*.15 3 c++ standards header-files
我正在阅读"C++编码标准:101规则,指南和最佳实践"一书,它说使用#define不好用.当我查看一些头文件时,他们有很多#defines.如果使用#defines 很糟糕,为什么会有这么多?谢谢.
#define 是一种不好的做法,因为:
他们没有任何范围:
#defines不尊重范围,因此无法创建类范围的命名空间.变量可以在类中作用域.
编译错误期间奇怪的神奇数字:
如果您正在使用#define它们在预编译时被预处理器替换那么如果您在编译期间收到错误,那将会引起混淆,因为错误消息不会引用宏名称而是值,它将显示为突然值,并且一个人会浪费很多时间在代码中跟踪它.
调试问题:
同样出于#2中提到的相同原因,虽然调试#define不会提供太多帮助.
因此,使用const变量代替a 更好#define.
它们优于#define上述所有方面.#define只有在代码或定义包括标题保护中需要实际文本替换的地方才能真正有用.
为什么
#define在C标准头文件中广泛使用?
我想到的一个原因是,In C(与C++不同)const声明不会产生常量表达式.这意味着在C标准中引入可变长度数组之前,不能写出如下内容:
const int max_val = 100;
int foos[max_val];
Run Code Online (Sandbox Code Playgroud)
因为在C max_val中不是编译时常量,并且在引入VLA之前,数组下标需要是编译时常量.
因此,必须将此写为:
#define MAX_VAL 100
int foos[MAX_VAL];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
388 次 |
| 最近记录: |