【发布时间】:2012-11-23 18:11:47
【问题描述】:
我想在 Linux 上使用英特尔当前的编译器。我有一个应该检测编译器的内联宏。
它曾经与过去版本的 GCC 和 ICC 一起工作。但现在我通过 ICC 获得了extern inline。 ICC 现在是否定义__GNUC__?您将如何检测 ICC 或英特尔的 C++ 编译器 ICPC?
#ifndef INLINE
# if defined(__GNUC__) || defined(__GNUG__)
# define INLINE extern inline
# else
# define INLINE inline
# endif
#endif
【问题讨论】:
-
出于好奇,你为什么需要那个宏?
-
@delnan:确实,如果你需要像这样定义
INLINE,听起来你做错了什么...... -
是的,icc 定义了
__GNUC__,因为__GNUC__并不意味着“我是GCC”;它的意思是“我是 'GNU C' 语言(标准 C 的超集)的编译器”。 -
关于 ICC 与 GCC 的兼容性,您可能想在这里阅读:software.intel.com/sites/products/collateral/hpc/compilers/…
-
我将它用于复杂的数字。根据我阅读的内容,如果这些语句是明确的,编译器会更加努力地内联函数。请注意,我知道告诉编译器有关内联的不同方法。事实上,我最初在 3.x 版本中将它与 gcc 一起使用,它曾经非常相关。
标签: c macros c-preprocessor intel icc