簡單地說,#連線字串,##連線兩個引數
在程式中擴充套件#define定義符號和巨集時,需要涉及幾個步驟。
1、在呼叫巨集時,首先對引數進行檢查,看看是否包含任何由#define定義的符號。如果是,它們首先被替換。
2、替換文字隨後被插入到程式中原來文字的位置。對於巨集,引數名被他們的值替換。
3、最後,再次對結果檔案進行掃瞄,看看它是否包含任何由#define定義的符號。如果是,就重複上述處理過程。
巨集引數和#define定義可以包含其他#define定義的符號。但是,巨集不可以出現遞迴。
## 連線符號由兩個#組成,其功能是在帶引數的巨集定義中將兩個子串(token)聯接起來,從而形成乙個新的子串。但它不可以是第乙個或者最後乙個子串。所謂的子串(token)就是指編譯器能夠識別的最小語法單元。
它可以拼接符號(token-pasting operator)。
msdn上有個例子:
#define paster( n ) printf( "token"#n" = %d\n", token##n )
int token9 = 100;
再呼叫 paster(9);巨集展開後token##n直接合併變成了token9。整個語句變成了
printf( "token""9"" = %d", token9 );
在c語言中字串中的二個相連的雙引號會被自動忽略,於是上句等同於
printf("token9 = %d", token9);。
即輸出token9 = 100
的使用與區別
是 邏輯或的意思,就是或者,有乙個對的就是對的。a b,表示a表示式或b表示式有乙個返回true,則a b整個表示式返回true。例 1 1 1 1 返回true 1 1 1 2 返回true 1 2 1 2 返回false 是邏輯且的意思,就是並且,有乙個是錯的就是錯的。a b,表示a表示式或b表...
LIB與DLL的區別與使用
共有兩種庫 一種是lib包含了函式所在的dll檔案和檔案中函式位置的資訊 入口 由執行時載入在程序空間中的dll提供,稱為動態鏈結庫dynamic link library。一種是lib包含函式 本身,在編譯時直接將 加入程式當中,稱為靜態鏈結庫static link library。共有兩種鏈結方...
em與rem的區別與使用
一 區別 1 em em是一種相對長度單位,相對於自身元素的字型大小大小,如果沒有設定即參照父容器的字型大小大小或瀏覽器預設字型大小大小。舉例 如乙個div box的寬度設定為 box,其字型大小大小 box,則此div的寬度為140px。2 rem rem是css3的新標準也是一種相對長度單位,其...