1. # 與##的區別
1.1. #巨集定義時轉變引數為字串
e.g.1:view code#define str(str) #str
char *mystr =str(test);
printf("%s
",mystr);
result:
"test
"e.g.2:
#define str(str) #str
char *myits =str(1024
);printf("%s
",myits);
result:
"1024
"e.g.3:
#define str(str) #str
#define size 1024
char *myint =str(size);
printf("%s
",myint);
result:
"size"//
此處輸出式size 因為size是乙個巨集,不會再展開
e.g.4:
#define _str(str) #str
#define str(str) _str(str)
#define size 1024
char *myint =str(size);
printf("%s
",myint);
result:
"1024"//
增加了中間層,可以正確轉換
1.2. ##用於巨集定義時將兩個內容進行拼接
e.g.1view code: #define link2(a,b) a##b
char *mystr =link2(o,k);
printf("%s
",mystr);
result: "ok
"e.g.2:
#define link3(a,b,c) a##b##c
char *mystr = link3(c,+,+);
printf("%s
",mystr);
result:
"c++
"
2. gcc 的引數中新增巨集
-dmacro 等價於**裡 #define macro
-dmacro=value 等價於**裡 #define macro value
-umacro 等價於**裡 #undef macro
關於巨集定義
一 巨集替換 1.巨集展開的順序 先由外層向內層檢查,直至最內層後依次向外層展開。例外 遇到 開頭的巨集就不再往內檢查,從該層開始往外展開。2.重新掃瞄和替換 在替換列表中的所有引數替換過之後,預處理器將對結果token序列重新掃瞄以便對其中的巨集再次替換。當正在替換的巨集在其替換列表中發現自身時,...
關於巨集定義
發現release版本是沒有上面的這些巨集定義,所以準備去unity的playersettings去設定看看,我加了乙個ttt的巨集定義,發現結果還是這樣,如圖下 發現了debug模式下是有這些亂七八糟的巨集定義的,但是release模型下是沒有的,怎麼辦呢?我準備修改這個檔案試試把debug有的巨...
關於巨集定義函式
擷取部分內容 使用帶引數的巨集定義可完成函式呼叫的功能,又能減少 系統開銷,提高執行效率。正如c語言中所講,函式的使用可以使程式更加模組化,便於組織,而且可重複利用,但在發生函式呼叫時,需要保留呼叫函式的現場,以便子 函式執行結束後能返回繼續執行,同樣在子函式執行完後要恢復呼叫函式的現場,這都需要一...