是否在gcc和g ++编译器中定义了预处理器宏,以便如果我想将C代码链接到C标准库或C ++标准库?类似的东西:
someFile.c
#ifdef __CPP__
#include <c++ library include>
#else
#include <c library include>
我确信有一个快速的谷歌搜索没有立即指出我,我确信有人会发布重复的问题,但无论如何,请指出我正确的方向。< / p>
答案 0 :(得分:10)
在c ++中你可以
#ifdef __cplusplus
例如,如果c ++代码你希望编译器将某段代码作为c代码处理,则需要将该块放入
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
答案 1 :(得分:5)
我不确定是否有特定于GCC的#define
,但C ++标准定义了符号__cplusplus
。如果存在,那么您使用的是C ++编译器。
答案 2 :(得分:0)
正如其他答案所指出的那样,测试__cplusplus
predefined macro的定义是有效的:
__ cplusplus 表示正在使用的C ++标准版本,扩展为 值199711L(直到C ++ 11),201103L(C ++ 11),201402L(C ++ 14),或 201703L(C ++ 17)。
还有一个可能对您有用的GCC特定宏,__GNUG__
。正如GCC documentation中所述:
<强> __ GNUG __ 强>
GNU C ++编译器对此进行了定义。测试它相当于测试 (__GNUC__&amp;&amp; __cplusplus)。
链接的GCC文档还列出了由不同GNU编译器定义的其他宏。
答案 3 :(得分:0)
在6.10.8 Predefined macro names中,C11标准说(强调我的)
实现不会预定义宏__cplusplus,也不会在任何标准头中定义它。
我相信C ++要求一致的实现来定义该名称,因此您可以使用它来区分语言
#ifdef __cplusplus
/* c++ code */
#else
/* c code */
#endif