C語言中的巨集定義

2021-08-15 15:57:46 字數 1283 閱讀 4759

下列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語言中是允許使用者自己加入一些特定的預處理指令的。一,不帶引數的巨集定義 不帶引數的巨集定義是比較簡單的,就是...