首页 C++系列2:宏定义时#(井号)和##(双井号)的作用
文章
取消

C++系列2:宏定义时#(井号)和##(双井号)的作用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#表示将其后的内容转换为字符串,即加上双引号。

#define example(instr) printf("the input string is:%s",#instr)
#define example1(instr) #instr
当使用该宏定义时:
example(abc);  在编译时将会展开成:printf("the input string is:%s","abc");
string str=example1(abc);  将会展成:string str="abc";

##被称为连接符

#define TYPE1(type,name)   type name_##type##_type
#define TYPE2(type,name)   type name##_##type##_type

TYPE1(int, c); 转换为:int  name_int_type ; (因为##号将后面分为 name_ type  _type三组,替换后强制连接)
TYPE2(int, d);转换为: int  d_int_type ; (因为##号将后面分为 name_type _type四组,替换后强制连接)
本文由作者按照 CC BY 4.0 进行授权