在编译时检测ICC和GCC

| 如果我使用的是gcc或icc,如何在编译时进行检测? (我很困惑地发现icc定义了
__GNUC__
-甚至是
__GNUC_MINOR__
__GNUC_PATCHLEVEL__
!为什么?)     
已邀请:
我们用
#ifdef __INTEL_COMPILER
icc
拆分为默认值
gcc
。     
相信您可以据此核对6英镑。     
ICC定义“ 0”等的原因是因为您的代码正在检查特定于编译器的宏,并希望看到它们。     
传统上,编译器将自己的符号及其版本定义为预处理器符号,以便可以对代码进行修改(通常用于解决错误或特殊性)。 CLang以
__has_feature
查询的形式引入了一种到目前为止尚未见过的机制。它并不能替代“解决错误”的做法(这就是CLang仍然公开特定符号的原因),但是允许使用更自然的样式来查询编译器功能。我不知道其他编译器是否计划定义这种功能。     
您可以使处理器输出在预处理器输出中定义的宏,然后寻找适合您的宏。您可以这样生成预处理器输出:
icc  -dM -E -o foo.P foo.c
然后查看“ 10”(因为它是文本文件)。就我而言,我发现
icc
定义了编译器版本的
__ICC
宏。它没有定义任何
__INTEL_COMPILER
。     

要回复问题请先登录注册