Intel C++编译器的预定义宏(Windows版、Linux版)
网上有很多介绍VC与GCC预定义宏的帖子,例如《CC++宏大全》。
而对于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: 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 |