http://hi.baidu.com/kiraversace/item/1148ee057147981a4ac4a3e9
C++/C 宏定義(define)中# ## 的含義
define 中的# ## 一般是用來拼接字符串的,但是實際使用過程中,有哪些細微的差別呢,我們通過幾個例子來看看。
#是字符串化的意思,出現在宏定義中的#是把跟在后面的參數轉成一個字符串;
eg:
1
2
3
|
#define strcpy__(dst, src) strcpy(dst, #src)
strcpy__(buff,abc) 相當於 strcpy__(buff,“abc”)
|
##是連接符號,把參數連接在一起
1
2
3
|
#define FUN(arg) my##arg
則 FUN(ABC)
等價於 myABC
|
再看一個具體的例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include <iostream>
using
namespace
std;
#define OUTPUT(A) cout<<#A<<":"<<(A)<<endl;
int
main()
{
int
a=1,b=2;
OUTPUT(a);
OUTPUT(b);
OUTPUT(a+b);
return
1;
}
|
去掉#號我們得到這樣的結果,直接把a,b的值打印出來了,這是符合語法規則的,所以#的作用顯而易見。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include <iostream>
using
namespace
std;
#define OUTPUT(A) cout<<A<<":"<<(A)<<endl;
int
main()
{
int
a=1,b=2;
OUTPUT(a);
OUTPUT(b);
OUTPUT(a+b);
return
1;
}
|