一 可变参数宏 “…” 和 “VA_ARGS”
1.1 直接替代“…”
结果:weight = 1,shipping = 2
PR("weight = %d,shipping = %d\n",1,2);
1.2 可变参数的宏,可以有多个可变参数,加##用来支持0个可变参数的情况。
结果:
(1)Function:-[ViewController viewDidLoad]a
(2)错误,注意与(1)的区别,就是顺序不一样。
(3)Function:-[ViewController viewDidLoad]c:1
(1)#define myprintf(...) printf("Function:%s" __VA_ARGS__,__FUNCTION__);
输入:myprintf("a")
(2)#define myprintf2(...) printf("Function:%s" ,__FUNCTION__,__VA_ARGS__);
输入:这种是错误的
(3)#define myprintf3(fmt,...) printf("Function:%s"fmt ,__FUNCTION__,##__VA_ARGS__);
输入:myprintf3("c:%d",1)
二 “#”用来把参数转换成字符串
结果:2 is 4
#define PSQ(x) printf(""#x" is %d\n",(x)*(x))
PSQ(2);
三 “##” 把两个连接成当个语言符号
结果:token9 = 10;
#define paster( n ) printf( "token"#n" = %d\n ", token##n )
int token9=10;
paster(9);
也会阻止宏展开,只替换一次,从外开始替换。
结果:xA = 12
#define XNAME(n) x##n
#define A (2)
int xA = 12;
printf("xA = %d", XNAME(A));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)