當乙個巨集引數被放進巨集體時,這個巨集引數會首先被全部展開(有例外,見下文)。當展開後的巨集引數被放進巨集體時,
預處理器對新展開的巨集體進行第二次掃瞄,並繼續展開。例如:
#define param( x ) x
#define addparam( x ) int_##x
param( addparam( 1 ) );
因為addparam( 1 ) 是作為param的巨集引數,所以先將addparam( 1 )展開為int_1,然後再將int_1放進param。
例外情況是,如果param巨集裡對巨集引數使用了#或##,那麼巨集引數不會被展開:
#define param( x ) #x
#define addparam( x ) int_##x
param( addparam( 1 ) ); 將被展開為"addparam( 1 )"。
C語言中的巨集替換
define替換規則 在程式中擴充套件 define定義符號和巨集 1.在呼叫巨集時,首先對引數進行檢查,看看是否包含任何由 define定義的符號,其首先被調換 2.替換文字隨後被插入到程式中原來文字的位置,對於巨集,引數名被他們的值替換 3.最後再次對結果檔案進行掃瞄,看看它是否包含任何由 de...
c語言中的巨集替換
define替換規則 在程式中擴充套件 define定義符號和巨集 1.在呼叫巨集時,首先對引數進行檢查,看看是否包含任何由 define定義的符號,其首先被調換 2.替換文字隨後被插入到程式中原來文字的位置,對於巨集,引數名被他們的值替換 3.最後再次對結果檔案進行掃瞄,看看它是否包含任何由 de...
C 中的巨集替換
1.引子 define cat x,y x y 那麼cat a,b 和cat cat a,b c 的結果是啥.define str impl x x define str x str impl x 的意圖何在.2.規則 巨集替換是c c 的預處理中的一部分,在c 標準中有4條規則來定義替換.規則1 ...