预编译指令与相关宏小结
//========================================================================
//TITLE:
//??? 預編譯指令與相關宏小結
//AUTHOR:
//??? norains
//DATE:
//??? Saturday? 10-December-2007
//Environment:
//??????? EVC4.0 + Windows CE 5.0 Standard SDK
//========================================================================
1.預編譯指令
01) #
? 空指令,無任何效果
02) #include?????
? 包含一個源代碼文件
03) #define
? 定義宏
?
04) #undef
? 取消已定義的宏
05) #if
? 如果給定條件為真,則編譯下面代碼
?
06) #else??????????????????????????????????
?? 作為其他預處理的剩余選項進行編譯
07) #ifdef
? 如果宏已經定義,則編譯下面代碼
08) #ifndef
? 如果宏沒有定義,則編譯下面代碼
09) #elif
? 如果前面的#if給定條件不為真,當前條件為真,則編譯下面代碼
10) #endif
? 結束一個#if……#else條件編譯塊
?
11) #line
? 改變當前的行數和文件名稱
?
12) #pragma
? 為編譯程序提供非常規的控制流信息
13) #error
? 停止編譯并顯示錯誤信息
?
?
?
?
?
2.與編譯器相關的宏
??? 文中只列出部分相關宏,如果想查看完整的宏列表,可參考MSDN的"Predefined Macros"一節
01) _MSC_VER
??? Microsoft 編譯器的版本宏.???
??? 各版本編譯器相應的數值如下表所示:
???
??????? Compiler?????????????????????????????? _MSC_VER value
?? --------------------??????????????????? -----------------------
?? C Compiler version 6.0????????????????????????? 600
?? C/C++ compiler version 7.0????????????????????? 700
?? Visual C++, Windows, version 1.0??????????????? 800
?? Visual C++, 32-bit, version 1.0???????????????? 800
?? Visual C++, Windows, version 2.0??????????????? 900
?? Visual C++, 32-bit, version 2.x???????????????? 900
?? Visual C++, 32-bit, version 4.0???????????????? 1000
?? Visual C++, 32-bit, version 5.0???????????????? 1100
?? Visual C++, 32-bit, version 6.0???????????????? 1200
?? Visual C++, 32-bit, version 2002??????????????? 1300
?? Visual C++, 32-bit, version 2003??????????????? 1310
?? Visual C++, 32-bit, version 2005??????????????? 1400
?? Embedded Visual C++, 32-bit,version 4.0??????? Cross 1200 - 1202
?????
??
02) _MFC_VER
??? MFC版本宏.
???????
?????? Version??????????????????????? _MFC_VER value
??? --------------????????????????? -----------------
??????? 4.21???????????????????????????? 0x0421
??????? 6.0????????????????????????????? 0x0600
??????? 7.0????????????????????????????? 0x0700
03) __TIME__
??? 編譯當前源文件的時間,格式為 "hh:mm:ss" 樣式的字符串.
???
04) __DATE__
???? 編譯當前源文件的日期,格式為 "Mmm dd yyyy" 樣式的字符串.
????
?????????
05) __FILE__
??? 編譯的當前源文件名.???
???
???
?
?
???
3.實例解說
?
01) 根據_MFC_VER值判斷當前的編譯環境.
??? #if _MSC_VER >= 1400
?????? // this is Visual C++ 2005
??? #elif _MSC_VER >= 1310
?????? // this is Visual c++ .NET 2003
??? #elif _MSC_VER > 1300
?????? // this is Visual C++ .NET 2002
??? #endif
?
???
02) #else if 和 #elif 的細微差別
??? #if _MSC_VER < 1202
????? //EVC 4.0 complier is cross 1200 - 1202?
??? #else if _MSC_VER >= 1400
????? //Visual C++ 2005 complier is 1400
??? #else
????? //Visual C++ 2005 complier is 1400
??? #endif
???
??? 這段預編譯代碼在Evc4.0和visual studio 2005中編譯會出錯,提示錯誤為"unexpected #else".此時只要將"#else if"置換成"#elif"即可:
???
??? #if _MSC_VER < 1202
????? //EVC 4.0 complier is cross 1200 - 1202?
??? #elif _MSC_VER >= 1400
????? //Visual C++ 2005 complier is 1400
??? #else
????? //Visual C++ 2005 complier is 1400
??? #endif
???
??? 上面代碼可以順利編譯通過.
???
03) 包含上級目錄的某個頭文件
??? 如果當前文件需要包含上級目錄的某個頭文件,可采用"..//"形式,比如:
??? #include "..//Configure.h"
???
??? 甚至還可以層層遞推,定位于上上級目錄:
??? #include "..//..//Configure.h"
???
???
04) 包含當前目錄的某個文件夾下的頭文件
??? 如果當前文件需要包含當前目錄下的某個文件夾中的某個頭文件,可采用".//"形式,比如:
??? #include ".//Include//Configure.h"
???
???
05) 判斷當前CPU類型
?#ifdef _X86_
??? //x86
?#endif
?#ifdef _MIPS_
??? //Mips
?#endif
?#ifdef _ARM_
??? //Arm
?#endif
?
?
06)代碼中手動添加lib庫
? #pragma comment (lib,"..//Engine//Engine.lib")?
轉載于:https://www.cnblogs.com/wodeyitian/archive/2007/12/16/2460469.html
總結
以上是生活随笔為你收集整理的预编译指令与相关宏小结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 再赠邓超明(帮别人名字作诗)
- 下一篇: [转]web测试技术经典案例