1. 帶參數的宏只完成簡單字符替換,之前不做計算實參的工作,如下
結果應該是 s=a+b+b*c+b+c=10。
2. define中的特殊標識符
結果是 a=1234,c='a',c="1234";
可以看出 ## 是簡單的連接符,#@用來給參數加單引號,#用來給參數加雙引號即轉成字符串。
更神奇的是
char *s = x(a b/**/ c);
結果是*s="a b c",*p="a//nb",#s果然很厲害
3.define的多行定義
define可以替代多行的代碼
關鍵是要在每一個換行的時候加上一個"/"
由此聯想到了C中的關於字符串的一些默認規則
其中只有s4會產生編譯錯誤,s1="abcefg",s2="abcefg",s3="abc"
4. 宏調用順序
結果是a=5;可見一個宏的參數是另一個宏,先替換外面的宏,後替換參數。即Conn(A,B)=>AB,後AB=>5
5.解決重複定義的問題由於頭文件包含可以嵌套,那麼C文件就有可能包含多次同一個頭文件,就可能出現重複定義的問題的。
通過條件編譯開關來避免重複包含(重複定義)
例如
#ifndef __headerfileXXX__
#define __headerfileXXX__
…
文件內容
…
#endif