在c++的巨集定義中,符號##一般是用於連線,包括引數的連線,引數與識別符號的連線等,然後形成乙個新的識別符號。
下面舉幾個例子來進行說明。
eg1:
1或者不用#define ab "123456",直接在main函式中定義乙個string ab="123456"也是可以的。#define add(a,b) a##b
2#define ab "123456"
3int
main()
4
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...