關於巨集定義雜談

2022-07-25 08:33:11 字數 1351 閱讀 5544

1. # 與##的區別

1.1. #巨集定義時轉變引數為字串

e.g.1: 

#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"//

增加了中間層,可以正確轉換

view code

1.2. ##用於巨集定義時將兩個內容進行拼接

e.g.1

: #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++

"

view code

2. gcc  的引數中新增巨集

-dmacro             等價於**裡   #define macro

-dmacro=value  等價於**裡   #define macro value

-umacro            等價於**裡    #undef macro

關於巨集定義

一 巨集替換 1.巨集展開的順序 先由外層向內層檢查,直至最內層後依次向外層展開。例外 遇到 開頭的巨集就不再往內檢查,從該層開始往外展開。2.重新掃瞄和替換 在替換列表中的所有引數替換過之後,預處理器將對結果token序列重新掃瞄以便對其中的巨集再次替換。當正在替換的巨集在其替換列表中發現自身時,...

關於巨集定義

發現release版本是沒有上面的這些巨集定義,所以準備去unity的playersettings去設定看看,我加了乙個ttt的巨集定義,發現結果還是這樣,如圖下 發現了debug模式下是有這些亂七八糟的巨集定義的,但是release模型下是沒有的,怎麼辦呢?我準備修改這個檔案試試把debug有的巨...

關於巨集定義函式

擷取部分內容 使用帶引數的巨集定義可完成函式呼叫的功能,又能減少 系統開銷,提高執行效率。正如c語言中所講,函式的使用可以使程式更加模組化,便於組織,而且可重複利用,但在發生函式呼叫時,需要保留呼叫函式的現場,以便子 函式執行結束後能返回繼續執行,同樣在子函式執行完後要恢復呼叫函式的現場,這都需要一...