網上有很多介紹VC與GCC預定義宏的帖子,例如《C\C++宏大全》。
而對於Intel C++編譯器的預定義宏,似乎沒人介紹。
我Google了很久,發現Intel官網上有,但是很奇怪,很多鏈接都失效了,報告404錯誤。反復調整搜索關鍵字,一個一個的嘗試鏈接,最后終於找到了有效的頁面了。為了怕以后鏈接失效,趕緊記錄下載。
該手冊的名字是《Intel® C++ Compiler XE 12.1 User and Reference Guides》,分別有Windows版和Linux版——
Windows:http://software.intel.com/sites/products/documentation/hpc/composerxe/en-us/2011Update/cpp/win/index.htm
Linux:http://software.intel.com/sites/products/documentation/hpc/composerxe/en-us/2011Update/cpp/lin/index.htm
一、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: |
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; |
| __REGISTER_PREFIX__ |
|
| __SIGNED_CHARS__ |
1 |
| __SIZE_TYPE__ |
unsigned on IA-32 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 |
| __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 |
