一直覺得C語言的預處理 器是個美妙而神奇的工具,以後會陸續把自己學到的關於它的新知識總結出來。To be continued aways...
一、 #define替換 (Pointer ON C , Ch14.2.2)
程序中擴展#define定義符號和宏時,涉及如下幾個步驟:
(1) 在調用宏時,首先對參數進行檢查,看看是否包含了任何由#define 定義的符號,如果是,它們首先被替換。
(2) 替換文本隨後被插入到程序中原來文本的位置,對於宏,參數被它們的值替代。
(3) 最後,再次到結果文本進行掃描,看看它是否包含了任何由#define 定義的符號,如果是,就重複上述處理過程。
看一個例子:
#define _QUOTEME(x) #x
#define QUOTEME(x) _QUOTEME(x)
那麼QUOTEME(__LINE__);將會被替換成字符串“34”(如果當QUOTEME被調用時,__LINE__剛好等於34)
而_QUOTEME(__LINE__);將會直接被替換爲"__LINE__"!