C++ C/C+中定义的(XXXX)宏+;?

C++ C/C+中定义的(XXXX)宏+;?,c++,c,operators,defined,C++,C,Operators,Defined,我正在浏览BSON源代码,发现了一些我以前从未见过的东西 : #如果!已定义(内部为BSON_)&&!已定义(BSON_编译) #错误“只能直接包含。” #恩迪夫 上面定义的宏(XXXX)是什么?我可以猜到它的作用,但我似乎找不到任何关于它的文档。它是特定于某些编译器的吗?它给了我一个关于微软Visual C++的W4警告(我正在试图解决我的项目)。< P> < 控制条件包含的表达式应为整数 常量表达式,除了:标识符(包括 词汇上与关键字相同)的解释如下所述 在下面166)并且它可能包含以下

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

:

#如果!已定义(内部为BSON_)&&!已定义(BSON_编译)
#错误“只能直接包含。”
#恩迪夫
上面定义的
宏(XXXX)
是什么?我可以猜到它的作用,但我似乎找不到任何关于它的文档。它是特定于某些编译器的吗?它给了我一个关于微软Visual C++的W4警告(我正在试图解决我的项目)。

< P> <

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

  defined identifier

  defined ( identifier )
如果标识符当前定义为宏,则其计算结果为1 名称(即,如果它是预定义的,或者如果它是
#define
预处理指令,不使用具有相同主题标识符的插入指令(如果不是),则为0


它不是宏——它是一个运算符

可能会有帮助。工作方式类似于
#ifdef
,但允许您创建多谓词条件,而不是多个嵌套的
#ifdef
块。您搜索过“定义的c”吗?@miliesmith Nope,我在其中添加了“宏”一词!就是这样,在第二页,当我删除这个词的时候,Google工作得很好。搜索“c定义”时,第一次点击的是:。哇。谢谢-我不知道这个存在。那是C参考。它对C++也是有效的吗?@ Aron SnOsWoWr.:我们再次看到标签如何导致这种情况。我的答案完全是针对C给出的——我不知道C++11或C++14标准是否都给出了它……如果我发现任何有用的东西(缺席或缺席)都会更新。
  defined ( identifier )