繁体   English   中英

是否有预处理器定义来区分gcc和g ++代码?

[英]Are there preprocessor defines to differentiate gcc and g++ code?

是否在gcc和g ++编译器中定义了预处理器宏,以便如果我想将C代码链接到C标准库或C ++标准库? 就像是:

someFile.c

#ifdef __CPP__
   #include <c++ library include>
#else
   #include <c library include>

我确信有一个快速的谷歌搜索没有立即指出我,我相信有人会发布重复的问题,但无论如何,请指出我正确的方向。

在c ++中你可以

#ifdef __cplusplus

例如,如果c ++代码您希望编译器将某些代码作为c代码处理,则需要将该块放入

#ifdef __cplusplus
   extern "C" {
#endif

#ifdef __cplusplus
}
#endif

我不确定是否有特定于GCC的#define ,但C ++标准定义了符号__cplusplus 如果存在,那么您使用的是C ++编译器。

正如其他答案所指出的,测试__cplusplus 预定义宏的定义将起作用:

__cplusplus表示正在使用的C ++标准版本,扩展为值199711L(直到C ++ 11),201103L(C ++ 11),201402L(C ++ 14)或201703L(C ++ 17)。


还有一个可能对您有用的GCC特定宏__GNUG__ GCC文档中所述

__GNUG__

GNU C ++编译器定义了这个。 测试它相当于测试(__GNUC__ && __cplusplus)。

链接的GCC文档还列出了由不同GNU编译器定义的其他宏。

6.10.8预定义宏名称中C11标准说(强调我的)

实现不应预定义宏__cplusplus,也不应在任何标准头中定义它。

我相信C ++要求一致的实现来定义该名称,因此您可以使用它来区分语言

#ifdef __cplusplus
/* c++ code */
#else
/* c code */
#endif

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM