gpt4 book ai didi

C++编码标准#define头文件

转载 作者:太空狗 更新时间:2023-10-29 20:15:40 25 4
gpt4 key购买 nike

我正在阅读《C++ 编码标准:101 条规则、指南和最佳实践》一书,它说使用 #define 不好用。当我查看一些头文件时,它们有很多 #define。如果使用#define不好,为什么会有这么多?谢谢。

最佳答案

#define是一种不好的做法,因为:

They don't have any Scope:

#define s 不尊重范围,因此无法创建类范围的命名空间。而变量可以在类中限定范围。

Weird magical numbers during compilation errors:

如果您使用 #define这些在预编译时被预处理器替换 所以如果你在编译过程中收到错误,那会很困惑,因为错误消息不会引用宏名称而是引用值,它会出现一个突然的值,这会浪费很多时间在代码中追踪它。

Debugging Problems:

同样出于 #2 中提到的相同原因,同时调试 #define真的不会提供太多帮助。

因此,使用 const 是更好的主意变量而不是 #define .
它们优于 #define在所有上述方面。只有领域 #define真正有用的是您需要在代码中或定义包含 header 保护的实际文本替换。

Why are #definewidely used in C standard header files?

我想到的一个原因是,在 C 中(与 C++ 不同)const声明不会产生常量表达式。这意味着在 C 标准中引入可变长度数组 之前,不能编写如下内容:

const int max_val = 100;  
int foos[max_val];

因为在 C 中 max_val不是编译时常量,在引入 VLA 的数组下标之前,需要作为编译时常量。
所以不得不把它写成:

#define MAX_VAL 100  
int foos[MAX_VAL];

关于C++编码标准#define头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12208222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com