网上有很多介绍VC与GCC预定义宏的帖子,例如《》。
而对于Intel C++编译器的预定义宏,似乎没人介绍。
我Google了很久,发现Intel官网上有,但是很奇怪,很多链接都失效了,报告404错误。反复调整搜索关键字,一个一个的尝试链接,最后终于找到了有效的页面了。为了怕以后链接失效,赶紧记录下载。该手册的名字是《Intel® C++ Compiler XE 12.1 User and Reference Guides》,分别有Windows版和Linux版—— Windows: Linux:
一、Windows版
1.1 ANSI Standard Predefined Macros(ANSI标准预定义宏)
The ANSI/ISO standard for the C language requires that certain predefined macros be supplied with conforming compilers. The following table lists the macros that the Intel® C++ Compiler supplies in accordance with this standard:
The compiler includes predefined macros in addition to those required by the standard. The default predefined macros differ among Windows*, Linux*, and Mac OS* X operating systems due to the default /Za compiler option on Windows. Differences also exist on Linux OS and Mac OS X as a result of the -std compiler option.
Macro | Value |
__DATE__ | The date of compilation as a string literal in the formMmm dd yyyy. |
__FILE__ | A string literal representing the name of the file being compiled. |
__LINE__ | The current line number as a decimal constant. |
__STDC__ | The name __STDC__ is defined when compiling a C translation unit. |
__STDC_HOSTED__ | 1 |
__TIME__ | The time of compilation as a string literal in the formhh:mm:ss. |
1.2 Additional Predefined Macros(额外的预定义宏)
The Intel® C++ Compiler supports the predefined macros listed in the table below. The compiler also includes predefined macros specified by the ISO/ANSI standard.
The following table lists the predefined macros on systems based on either the IA-32 or Intel® 64 architecture.
These labels apply:
- i32 means that the macro is included on systems based on IA-32 architecture.
- i64em means that the macro is included on systems based on Intel® 64 architecture.
Macro Name | Value | i32 | i64em |
__cilk | 200; however, if /Qcilk-serialize or /Qintel-extensions- is specified, the value is undefined | X | X |
__COUNTER__ | 0 | X | X |
__ECL | Intel compiler version |
|
|
__EDG__ | 1 | X | X |
__EDG_VERSION__ | EDG version | X | X |
_export | no value | X | X |
__ICL | Intel compiler version | X | X |
_INC_STDIO | no value | X | X |
_INTEGRAL_MAX_BITS | 64 | X | X |
__INTEL_COMPILER | Intel compiler version | X | X |
__INTEL_COMPILER_BUILD_DATE | YYYYMMDD | X | X |
__INTEL_MS_COMPAT_LEVEL | 1 | X | X |
__LONG_DOUBLE_SIZE__ | 64 | X | X |
_M_AMD64 | 1 |
| X |
_M_IX86 | 700 | X | X |
_M_IA64 | 64200 |
| X |
_M_X64 | 1 |
| X |
_MSC_EXTENSIONS | 1 | X | X |
_MSC_FULL_VER | IA-32 architecture only: 13102292 | X | X |
_MSC_VER | 1400, 1500, or 1600, depending on the Microsoft Visual Studio* environment (Visual Studio 2005, 2008, or 2010, respectively). | X | X |
_MT | 1 | X | X |
_OPENMP | 200805 | X | X |
_PGO_INSTRUMENT | 1 | X | X |
__QMSPP_ | 1 | X |
|
__SIGNED_CHARS__ | 1 | X | X |
_SIZE_T_DEFINED | no value | X | X |
__STDC_VERSION__ | 199409L | X | X |
__w64 | no value | X | X |
_WCHAR_T_DEFINED | no value | X | X |
_WCTYPE_T_DEFINED | no value | X | X |
_WIN32 | 1 | X | X |
_WIN64 | 1 |
| X |
_VA_LIST_DEFINED | no value | X | X |
二、Linux版
2.1 ANSI Standard Predefined Macros(ANSI标准预定义宏)
The ANSI/ISO standard for the C language requires that certain predefined macros be supplied with conforming compilers. The following table lists the macros that the Intel® C++ Compiler supplies in accordance with this standard:
The compiler includes predefined macros in addition to those required by the standard. The default predefined macros differ among Windows*, Linux*, and Mac OS* X operating systems due to the default /Za compiler option on Windows. Differences also exist on Linux OS and Mac OS X as a result of the -std compiler option.
Macro | Value |
__DATE__ | The date of compilation as a string literal in the formMmm dd yyyy. |
__FILE__ | A string literal representing the name of the file being compiled. |
__LINE__ | The current line number as a decimal constant. |
__STDC__ | The name __STDC__ is defined when compiling a C translation unit. |
__STDC_HOSTED__ | 1 |
__TIME__ | The time of compilation as a string literal in the formhh:mm:ss. |
2.2 Additional Predefined Macros(额外的预定义宏)
The Intel® C++ Compiler includes a number of predefined macros. The compiler also includes predefined macros specified by the ISO/ANSI standard.
Predefined Macros on Systems based on IA-32 or Intel® 64 Architectures
The following table lists the predefined macros on systems based on either the IA-32 or Intel® 64 architecture.
Unless otherwise stated, the macros are supported on systems based on IA-32 architecture and also on systems based on Intel® 64 architecture.
Macro (IA-32 and Intel® 64 architecture) | Value |
__ARRAY_OPERATORS | 1 |
__BASE_FILE__ | Name of source file |
_BOOL | 1 |
__cilk | 200; however, if -cilk-serialize or -no-intel-extensions is specified, the value is undefined. |
__cplusplus | 1 (with C++ compiler) |
__DEPRECATED | 1 |
__EDG__ | 1 |
__EDG_VERSION__ | EDG version |
__ELF__ | 1 |
__extension__ |
|
__EXCEPTIONS | Defined as 1 when -fno-exceptions is not used. |
__GNUC__ | The major version number of gcc installed on the system. |
__GNUG__ | The major version number of g++ installed on the system. |
__gnu_linux__ | 1 |
__GNUC_MINOR__ | The minor version number of gcc or g++ installed on the system. |
__GNUC_PATCHLEVEL__ | The patch level version number of gcc or g++ installed on the system. |
__GXX_ABI_VERSION | 102 |
__HONOR_STD | 1 |
__i386 Available only on systems based on IA-32 architecture. | 1 |
__i386__ Available only on systems based on IA-32 architecture. | 1 |
i386 Available only on systems based on IA-32 architecture. | 1 |
__ICC | Intel compiler version |
__INTEL_COMPILER | Intel compiler version |
__INTEL_COMPILER_BUILD_DATE | YYYYMMDD |
__INTEL_RTTI__ | Defined as 1 when -fno-rtti is not specified. |
__INTEL_STRICT_ANSI__ | Defined as 1 when -strict-ansi is specified. |
__linux | 1 |
__linux__ | 1 |
linux | 1 |
__LONG_DOUBLE_SIZE__ | 80 |
__LONG_MAX__ Available only on systems based on Intel® 64 architecture. | 9223372036854775807L |
__LP64__ Available only on systems based on Intel® 64 architecture. | 1 |
_LP64 Available only on systems based on Intel® 64 architecture. | 1 |
_MT Available only on systems based on Intel® 64 architecture. | 1 |
__MMX__ Available only on systems based on Intel® 64 architecture. | 1 |
__NO_INLINE__ | 1 |
__NO_MATH_INLINES | 1 |
__NO_STRING_INLINES | 1 |
_OPENMP | Defined as 200805 when -openmp is specified. |
__OPTIMIZE__ | 1 |
__pentium4 | 1 |
__pentium4__ | 1 |
__PIC__ | Defined as 1 when -fPIC is specified. |
__pic__ | Defined as 1 when -fPIC is specified. |
_PGO_INSTRUMENT | Defined as 1 when -prof-gen[x] is specified. |
_PLACEMENT_DELETE | 1 |
__PTRDIFF_TYPE__ | int on IA-32 architecture; long on Intel® 64 architecture |
__REGISTER_PREFIX__ |
|
__SIGNED_CHARS__ | 1 |
__SIZE_TYPE__ | unsigned on IA-32 architecture ; unsigned long on Intel® 64 architecture |
__SSE__ | Defined as 1 for processors that support SSE instructions. |
__SSE2__ | Defined as 1 for processors that support SSE2 instructions. |
__SSE3__ | Defined as 1 for processors that support SSE3 instructions. |
__SSSE3__ | Defined as 1 for processors that support SSSE3 instructions. |
__unix | 1 |
__unix__ | 1 |
unix | 1 |
__USER_LABEL_PREFIX__ |
|
__VERSION__ | Intel version string |
__WCHAR_T | 1 |
__WCHAR_TYPE__ | long int on IA-32 architecture ; int on Intel® 64 architecture |
__WINT_TYPE__ | unsigned int |
__x86_64 Available only on systems based on Intel® 64 architecture. | 1 |
__x86_64__ Available only on systems based on Intel® 64 architecture. | 1 |