下列c**中包含兩種巨集定義,例如:
#include
#define max_connection 1000
#define mng_port 5000
#define min(a, b)((a) < (b) ? (a) : (b))
#define max(a, b)((a) > (b) ? (a) : (b))
int main()
方法1: gcc -e 引數預編譯
gcc -e 產生預編譯後的源**,即源**經過預編譯後的結果,所有的預編譯動作都已完成。如標頭檔案的插入,巨集定義的展開。
執行gcc -e test_macro.cpp > test_macro.e
命令後得到的預編譯**如下:
int main()
方法2: gdb 除錯debug**
為了除錯程式,需要使用-g選項,它的作用就是將除錯資訊加入到最後的二進位制可執行檔案中。-g引數也與-o一樣,是分級別的。當不指定級別的時候,其level為2,為了除錯巨集定義,我們可以使用更高的級別-g3。
執行編譯引數gcc -o test_macro -g3 test_macro.cpp
,對生成的二進位制檔案進行除錯:
(gdb) macro expand min(1, 2)
expands to: ((1) < (2) ? (1) : (2))
(gdb) macro expand max(1, 2)
expands to: ((1) > (2) ? (1) : (2))
#define min(a, b)((a) < (b) ? (a) : (b)) 巨集定義中竟然沒有空格,查閱資料得知,當進行函式巨集定義時,不是通過空格符來斷句,而是通過括號的匹配來斷句,參見:
the c programming language 2nd edition
when a macro has been defined in the second form(with parameters), subsequent textual instances ofthe macro identifier followed by optional white space, and then by (, a sequence of tokens separated by commas, and a ) constitute a call of the macro.
參考博文:
c 語言中的巨集定義
巨集定義 巨集定義是c提供的三種預處理功能的其中一種,這三種預處理包括 巨集定義 檔案包含 條件編譯 1.不帶引數的巨集定義 巨集定義又稱為巨集代換 巨集替換,簡稱 巨集 格式 define 識別符號 字串 其中的識別符號就是所謂的 符號常量,也稱為 巨集名 預處理 預編譯 工作也叫做巨集展開 將巨...
C語言中的巨集定義
c語言中的巨集定義 c語言中的巨集定義也叫做預處理命令,預處理命令是c語言本身的組成部分,不能直接對它們進行編譯。1.基本概念 1 預處理不是c語句,是在編譯前進行的 2 預處理功能主要用於下3種情況 巨集定義 檔案包含 條件編譯 3 巨集是在編譯前進行的,程式不能直接對它們進行編譯,由預處理程式先...
c語言解除巨集定義 C語言中巨集定義的用法
說到巨集定義,我們應該先了解什麼是預處理指令,相信大家並不會陌生,之前我們程式設計時,程式的開頭 include指令,define指令都是預處理指令,它能使我們的編譯更加的高效,便捷,因此c語言中是允許使用者自己加入一些特定的預處理指令的。一,不帶引數的巨集定義 不帶引數的巨集定義是比較簡單的,就是...