編譯階段列印巨集內容

2021-08-07 16:07:36 字數 762 閱讀 6386

//兩個用於測試的巨集

#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...