【问题标题】:defined(XXXX) macro in C/C++?在 C/C++ 中定义(XXXX)宏?
【发布时间】:2018-01-11 05:38:39
【问题描述】:

我正在浏览 BSON 源代码,发现了一些我以前从未见过的东西。

Line 22 in bson-macros.h:

#if !defined(BSON_INSIDE) && !defined(BSON_COMPILATION)
#error "Only <bson.h> can be included directly."
#endif

上面的defined(XXXX) 宏是什么?我可以猜到它的作用,但我似乎找不到任何关于它的文档。它是否特定于某些编译器?它给了我关于 Microsoft Visual C++ 的 W4 警告(我正试图在我的项目中解决)。

【问题讨论】:

  • This preprocessor reference 可能会有所帮助。
  • 工作方式类似于#ifdef,但允许您创建多谓词条件而不是多个嵌套的#ifdef 块。
  • 你用谷歌搜索过“定义的 c”吗?
  • @MillieSmith 不,我输入了“宏”这个词!当我删除那个词时,它在第二页上 >
  • Google 运行良好。搜索“c defined”给出了第一个命中:gcc.gnu.org/onlinedocs/cpp/Defined.html

标签: c++ c operators defined


【解决方案1】:

来自6.10.1

控制条件包含的表达式应为整数 常量表达式,除了:标识符(包括那些 词法上与关键字相同)被解释为描述 下面;166) 并且它可能包含以下形式的一元运算符表达式

  defined identifier

  defined ( identifier )

如果标识符当前被定义为宏,则计算结果为 1 名称(也就是说,如果它是预定义的或者它是 #define 预处理指令,中间没有具有相同主题标识符的 #undef 指令),如果不是,则为 0。

它不是macro - 它是一个运算符。

【讨论】:

  • 哇。谢谢 - 我不知道这存在。
  • 这是一个 C 引用。它对 C++ 也有效吗?
  • @aaronsnoswell.:我们再次看到标记如何导致这种情况。我的答案仅针对 C - 我不知道 C++11 或 C++14 标准是否允许它......如果我发现任何有用的东西(不存在或存在)将会更新。
猜你喜欢
  • 2018-11-12
  • 2022-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
相关资源
最近更新 更多