您的位置:首页 > 其它

【学习笔记】宏定义基础

2015-05-19 19:42 239 查看
在C/C++中,宏定义是由define完成的。

#define f(a,b) a##b

#define g(a)   #a

#define h(a)   g(a)

f(1,2)    输出:12     输出格式为%d ,若为%s则报错

g(f(1,2)) 输出:f(1,2) 输出格式%s

h(f(1,2)) 输出:12     输出格式%s

最外层宏可替换至最内层再转换,中间层则马上被转换。

define中有三个特殊的符号值得我们注意:

1. #:在宏展开的时候会将#后面的参数替换成字符串,如:

   #define p(str) printf(#str);

   调用p(this is test)的时候会将#exp换成"this is test"

2. ##:将前后两个的单词拼接在一起。例如:

   #define cat(x,y) x##y

   调用cat(test,123)展开后成为test123.

3. #@:将值序列变为一个字符

   #define ch(c) #@c

   调用ch(a)展开后成为'a'.

例:

#define A(x)  T_##x
#define B(x)  #@x
#define C(x)  #x
x=1
替换为:
A(1)------> T_1 (T_##x,##符号是记号粘黏符号,将前后的字符粘黏起来。)
B(1)------> '1' ( #@x , #@ 符号会将宏的参数进行字符串字面量化,并且加‘’号)
C(1)------> "1" ( #x ,#符号会将宏的参数进行字符串字面量化,并且加""号)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: