C 巨集定義 define 中 的使用

2021-08-17 04:44:50 字數 1609 閱讀 3420

在c++的巨集定義中,符號##一般是用於連線,包括引數的連線,引數與識別符號的連線等,然後形成乙個新的識別符號。

下面舉幾個例子來進行說明。

eg1:

1

#define add(a,b) a##b

2#define ab "123456"

3int

main()

4

或者不用#define ab "123456",直接在main函式中定義乙個string ab="123456"也是可以的。

eg2:

引數 __va_args__ 的使用;

引數 __va_args__ 一般用於代替巨集定義中的引數,或者說是沒有明確命名的引數:

舉例說明:

1

#define declear(var1,...)\

2int judge=0;\3

int m##var1=1;\4

int n##__va_args__=2;\5

6int

main()

717

輸出為:

hello1

hello2

hello3

說明:(1)#define(var1,...)說明該巨集定義至少會接收乙個引數,後面的"..."可以認為是很多個引數,但是沒有命名

(2)int m##var1=1:這裡的操作是將m於var1進行連線組成乙個新的識別符號,,mian函式中,呼叫declear(int,repeated),所以,var1為int,m##var1組成的新識別符號即為mint=1;

(3)int n##__va_args__=2: 這裡使用到了引數__va_args__, 該引數的作用一般標識未命名的識別符號,在main中,declear(int,repeated)傳兩個引數,但是declear巨集定義時只有乙個引數var1,其餘用"..."表示,此時,__va_args__的作用就是用於表示"..."代表的引數,這裡也就是repeated, 所以int n##__va_args__=2也就是int nrepeated=2;

(4)巨集定義中每一句**後面跟\表示換行,一定要注意,"\"後面不要跟任何字元,空格也不可以有。包括注釋"\\"或者/* */

##的使用現在我遇到的是可以減少**量,使用#define代替部分函式,這樣可以實現函式的復用。舉例來說明:

比如有不同的case,要對不同的資料型別就行處理但是處理方法都一樣,對應的函式分別為: getint(),getdouble(),getuint()等,此時可以使用##來做相應的處理,具體做法為:

#define getdata(type,...)\

case

type: \

break

;\呼叫的時候處理為:

switch

(type)

這樣即可。
如果不使用##的話就需要這樣進行處理:

switch

(type)

break

;

case

double

break

;

case

u_int:

break

;}

C 巨集定義 define 中 的使用

在c 的巨集定義中,符號 一般是用於連線,包括引數的連線,引數與識別符號的連線等,然後形成乙個新的識別符號。下面舉幾個例子來進行說明。eg1 1 define add a,b a b 2 define ab 123456 3int main 4 或者不用 define ab 123456 直接在ma...

C 巨集定義 define

可以用 define命令將乙個指定的識別符號 即巨集名 來代表乙個字串。定義巨集的作用一般是用乙個短的名字代表乙個長的字串。它的一般形式為 define 識別符號 字串 這就是已經介紹過的定義符號常量。如 define pi 3.1415926 還可以用 define命令定義帶引數的巨集定義。其定義...

define巨集定義中的 ,

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