define巨集定義中的 ,

2021-06-28 02:16:55 字數 1277 閱讀 7056

1、# (stringizing)字串化操作符

其作用是:將巨集定義中的傳入引數名轉換成用一對雙引號括起來引數名字串。其只能用於有傳入引數的巨集定義中,且必須置於巨集定義體中的引數名前。 如: 

#define example(instr) printf("the input string is:\t%s\n",#instr) 

#define example1(instr) #instr 

當使用該巨集定義時: 

example(abc);

在編譯時將會展開成:printf("the input string is:\t%s\n","abc"); 

string str=example1(abc);

將會展成:string str="abc";

注意: 對空格的處理

1、忽略傳入引數名前面和後面的空格。

如:str=example1(   abc );

將會被擴充套件成 str="abc";

2、當傳入引數名間存在空格時,編譯器將會自動連線各個子字串,用每個子字串中只以乙個空格連線,忽略其中多餘乙個的空格。 

如:str=exapme( abc    def);

將會被擴充套件成 str="abc def";

2、## (token-pasting)符號連線操作符

巨集定義中:引數名,即為形參,如#define sum(a,b) (a+b);中a和b均為某一引數的代表符號,即形式引數。 

而##的作用則是將巨集定義的多個形參成乙個實際引數名。 如: 

#define examplenum(n) num##n 

int num9=9;

使用:int num=examplenum(9);

將會擴充套件成 int num=num9; 

注意:

1、當用##連線形參時,##前後的空格可有可無 

如:#define examplenum(n) num ## n

相當於#define examplenum(n) num##n 

2、連線後的實際引數名,必須為實際存在的引數名或是編譯器已知的巨集定義   

// preprocessor_token_pasting.cpp 

#include

#define paster( n ) printf_s( "token" #n " = %d", token##n ) 

int token9 = 9;

int main() 

執行結果: token9 = 9

define巨集定義中的 , , ,

巨集只能放在一行,分多行時應用在行尾用 需要是最後乙個字元,最後一行不寫 c c 巨集命令的神奇用法。先看下面三條語句 cpp view plain copy define conn x,y x y define tochar x x define tostring x x 1 連線操作符 x y表...

C C 中巨集定義 define

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

define巨集定義

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