一、預(yù)定義__GNUC__宏 1 __GNUC__ 是gcc編譯器編譯代碼時預(yù)定義的一個宏,。需要針對gcc編寫代碼時,, 可以使用該宏進(jìn)行條件編譯。 2 __GNUC__ 的值表示gcc的版本,。需要針對gcc特定版本編寫代碼時,,也可以使用該宏進(jìn)行條件編譯。 3 __GNUC__ 的類型是“int”,,該宏被擴(kuò)展后,, 得到的是整數(shù)字面值??梢酝ㄟ^僅預(yù)處理,,查看宏擴(kuò)展后的文本。 示例: #include <assert.h> #include <stdio.h> #include <typeinfo> #error sample for gcc compiler #else /* use gcc special extension: #warning , __attribute__, etc. */ #endif int main() { printf("hello gcc %d\n",__GNUC__); assert( typeid(__GNUC__)==typeid(int) ); printf("press Enter to exit\n"); (void)getchar(); } 二,、預(yù)定義_MSC_VER宏 1 _MSC_VER是微軟C/C++編譯器——cl.exe編譯代碼時預(yù)定義的一個宏,。需要針對cl編寫代碼時, 可以使用該宏進(jìn)行條件編譯,。 2 _MSC_VER的值表示cl的版本,。需要針對cl特定版本編寫代碼時, 也可以使用該宏進(jìn)行條件編譯,。 3 _MSC_VER的類型是"int",。該宏被擴(kuò)展后,得到的是整數(shù)字面值,??梢酝ㄟ^僅預(yù)處理, 查看宏擴(kuò)展后的文本,。 示例: /* _MSC_VER\_MSC_VER.cpp */ #include <stdio.h> #include <stdlib.h> #include <typeinfo> #define TO_LITERAL(text) TO_LITERAL_(text) #define TO_LITERAL_(text) #text #ifndef _MSC_VER #error sample for msvc compiler #else /* use msvc special extension: #pragma message,__declspec,__stdcall,etc. */ #pragma message("----------------------------------------\n") #pragma message("----------------------------------------\n") #pragma message("---------- hello msvc " TO_LITERAL(_MSC_VER) " -------------") #pragma message("\n----------------------------------------\n") #pragma message("----------------------------------------\n") extern __declspec(dllimport) void __stdcall declare_but_dont_reference(void); #endif int main() { printf("hello msvc, version=%d\n",_MSC_VER); printf("typeof _MSC_VER=\"%s\"\n",typeid(_MSC_VER).name()); system("pause"); /* msvc only on windows? */ return 0; } |
|