在#ifdefine _debug和對應的#endif中有**,則這些**只有在除錯(debug)下才會被編譯。也就是說,如果你在release模式下,這些**根本不會存在於你的最終**裡頭。
這就是說這些巨集**本身是面向編譯器使用的。不能用於實現我們的業務邏輯**,這樣會帶來不良影響。這類巨集定義的乙個典型應用就是產生遮蔽除錯資訊,下面是例子:
#include
using namespace std;
#ifdef debug
inline void msg()
#else
inline void msg(){}
#endif
int main()
msg();
return 0;
上面的**在debug模式下是會輸出一句話的。你可以把這種應用放在你希望對程式的執行過程進行跟蹤的**裡,為它們加上一些痕跡,方便你進行判斷。而在其他模式(release)下,這個函式只不過是乙個空函式,又因為它是inline的,所以它實際上不會為你產生任何**。這樣你就能為自己的**帶來一種非常實用的效果,既能在debug模式下為你提供判斷的依據,又能在最終的release版中方便的拋棄掉它們,而不需要你手動地刪除掉那些**。
JS預編譯 函式預編譯和全域性預編譯
預編譯發生在函式執行前一步 建立ao物件 執行期上下文 找形參和變數宣告,將變數和形參名作為ao 屬性名,值為undefined 將實參值和形參統一 在函式體裡面找函式宣告,值賦予函式體 結果 預編譯過程 函式馬上要執行,但是還沒執行 首先建立ao物件,也就是函式它產生的儲存空間庫 ao,b und...
VS 之 預編譯處理 pragma用法
每個編譯器可能不一樣 只要在標頭檔案的最開始加入這條指令就能夠保證標頭檔案被編譯一次 當編譯器遇到這條指令時就在編譯輸出視窗中將訊息文字列印出來 pragma code seg identifier,segment name segment class 它能夠設定程式中函式 存放的 段,當我們開發驅...
預編譯與編譯
一c c 源 從最初的文字變為可執行檔案主要進行三大步 預編譯階段 主要是編譯器執行 文字處理工作,並不會進行語法檢查 主要執行三大類預編譯命令 巨集定義 文字替換功能,將使用了巨集的地方採取巨集定義方式直接展開 條件編譯 文字剪下功能,根據設定的條件選擇性刪除一些 片段 包含檔案 文字插入功能 i...