//兩個用於測試的巨集
#define pi 3.1415926
#define max(a,b) (a)>(b) ? (a) :(b)
//首先定義兩個輔助巨集
#define print_macro_helper(x) #x
#define print_macro(x) #x"="print_macro_helper(x)
//編譯階段列印巨集內容
#pragma message(print_macro(pi))
#pragma message(print_macro(pi2))
#pragma message(print_macro(max(a,b)))
#pragma message(print_macro(max(x,y)))
結果輸出
note: #pragma message: pi=3.1415926
//print_macro中的兩個x都被替換為pi,print_macro_helper中的#x替換為巨集pi的內容
note: #pragma message: pi2=pi2
//pi2不存在的情況下print_macro_helper將#x換做pi2
note: #pragma message: max(a,b)=(a)>(b) ? (a) :(b)
note: #pragma message: max(x,y)=(x)>(y) ? (x) :(y)
編譯階段列印巨集內容
對於大型c c 工程,由於巨集定義可能散落在各個標頭檔案和makefile當中。同時條件編譯又是大型工程常用的技巧,所以巨集定義的大量存在,給 閱讀增加了難度,如果搞不清楚巨集定義的情況就無法掌握程式的執行流程。最簡單的辦法就是使用printf來列印這些巨集,但是如果是帶引數的巨集就比較麻煩了。而且...
巨集定義和巨集編譯
以下是巨集定義的一些用法11.4.2 if defined else endif 此編譯指令為 ifdef else endif的等價編譯指令。其語法格式如下 if defined 常量表示式 段1 else 段2 endif 或 if defined 常量表示式 段1 else 段2 endif ...
利用巨集控制列印
利用巨集控制列印 在程式除錯時,我們經常需要輸出一些除錯資訊,當除錯完畢後,就不再需要使用了。那怎麼快速的在除錯狀態和發布狀態切換呢?通常我們使用預編譯加巨集定義來處理這個問題,例如 ifdef debug 除錯 endif 如果我們使用printf來顯示一些除錯資訊,那麼每個地方都加上 ifdef...