define巨集定義中的 , , ,

2021-08-18 07:31:06 字數 1049 閱讀 7671

巨集只能放在一行,分多行時應用在行尾用\

\需要是最後乙個字元,最後一行不寫

c/c++ 巨集命令的神奇用法。

先看下面三條語句:

[cpp]view plain

copy

#define conn(x,y) x##y 

#define tochar(x) #@x 

#define tostring(x) #x

(1)##,連線操作符

x##y表示什麼?表示x連線y,舉例說:

int  n = conn(123,456);  結果就是n=123456;

char* str = conn("asdf", "adf")結果就是 str = "asdfadf";

(2)#@,字元化操作符

只能用於有傳入引數的巨集定義中,且必須置於巨集定義體中的引數名前。作用是將傳的單字元引數名轉換成字元,以一對單引用括起來其實就是給x加上單引號,結果返回是乙個const char。舉例說:char a = tochar(1);結果就是a='1';

做個越界試驗char a = tochar(123);結果是a='3';

但是如果你的引數超過四個字元,編譯器就給給你報錯了!error c2015: too many characters in constant   :p

(3)#,字串化操作符

其作用是:將巨集定義中的傳入引數名轉換成用一對雙引號括起來引數名字串。其只能用於有傳入引數的巨集定義中,且必須置於巨集定義體中的引數名前。說白了,他是給x加雙引號:char* str = tostring(123132);就成了str="123132";

(4)\ 行繼續操作

\ 行繼續操作當定義的巨集不能用一行表達完整時,可以用"\"表示下一行繼續此巨集的定義注意:最後一行不要加續行符啊.vc的預處理器在編譯之前會自動將\與換行回車去掉(寫成多行時,反斜槓後不能有空格,否則編譯器(arm或vc)會報錯!),這樣一來既不影響閱讀,又不影響邏輯,皆大歡喜.

define巨集定義中的 ,

1 stringizing 字串化操作符 其作用是 將巨集定義中的傳入引數名轉換成用一對雙引號括起來引數名字串。其只能用於有傳入引數的巨集定義中,且必須置於巨集定義體中的引數名前。如 define example instr printf the input string is t s n inst...

C C 中巨集定義 define

define是c語言中提供的巨集定義命令,其主要目的是為程式設計師在程式設計時提供一定的方便,並能在一定程度上提高程式的執行效率,但學生在學習時往往不能 理解該命令的本質,總是在此處產生一些困惑,在程式設計時誤用該命令,使得程式的執行與預期的目的不一致,或者在讀別人寫的程式時,把執行結果理解錯誤,這...

define巨集定義

預處理指令 以 開頭的行,都預處理指令,用於指示編譯器做一些預處理工作。比如 include h 注 預處理指令不是語句,行尾不要加分號 define的兩種用法 1.定義乙個 數值 2.定義乙個 算式 注 工程中應該避免使用這兩種方式 定義乙個值 define pi 3.14 int main 定義...