C++ #ifndef TOKEN #define TOKEN

标签 c++ c-preprocessor ifndef

在某些情况下,我曾看到如下预处理器代码:

#ifndef TOKEN
#define TOKEN
#endif

对我来说,似乎在这种情况下(我知道它在包裹自身以外的元素时使用(包括为仍在回答的人提供守卫)),检查 TOKEN 是否已经是多余的在定义它之前定义它。如果我只是 #define 它,没有检查,结果是一样的。

这有一个共同的原因吗?编译时间?保留 block 以供将来添加?

谢谢。

最佳答案

因为否则您可能会收到宏重新定义警告。例如,我们有一些第三方 dll 的 header 包含以下内容。

#define PI 3.14

由于这些是在第三方 header 中定义的,我们无法控制它们,也无法删除或重命名它们。如果我们也尝试自己定义 Pi,我们会收到宏重新定义警告。所以你有两个选择,

1)使用他们的宏,并防止重定义

#ifndef PI
#define PI 3.14
#endif

2) 删除他们的定义,然后定义你自己的

#ifdef PI
#undef PI
#endif
#define PI 3.14

关于C++ #ifndef TOKEN #define TOKEN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26341602/

相关文章:

c++ - 为什么我用小写字母命名widget类后qt-creator构建失败?

c++ - 如何使用 C++ 将服务器的响应接收到字符串变量中?

C预处理器: dynamic const char

c - 让宏计算它的调用

c - 预处理器#ifndef

c++ - 如何访问结构中定义的变量

c++ - C++通用类,为什么需要.cpp文件?

macros - C 预处理器,宏 "Overloading"

c++ - 如何结合 ifndef win32 和 ifndef iOS

c++ - #ifndef 为什么要使用类名以外的其他名称?