C语言宏技巧

近日看到gtest的文章=》 http://www.cnblogs.com/coderzh/archive/2009/04/12/1434155.html 

对其宏使用的技巧感觉非常巧妙,使用宏充当了一个代码生成器的作用!!!用一句宏生成一个类(包括类的定义和实现)

参考: http://c.chinaitlab.com/basic/874223.html 对宏理解后,进行总结。



1, #在C语言的宏中的作用:字符串化

#define TESTCASE_NAME(testcase_name) testcase_name##_TEST

使用:TESTCASE_NAME(string_add)

gtest里的转化: class TESTCASE_NAME(testcase_name) : public TestCase  => class string_add_TEST : public TestCase


2, ##在C语言的宏中的作用: 连接符

gtest里的: new TESTCASE_NAME(testcase_name)(#testcase_name)); => new string_add_TEST("string_add") 



3,##在C语言的宏中的作用: 当__VAR_ARGS__为空的时候,消除前面的那个逗号。

#define myprintf(templt, …) fprintf(stderr,templt, ##__VAR_ARGS__)

当__VAR_ARGS__为空的时候,消除前面的那个逗号。 



4,宏里可以定义变量,C语言的宏中,在{}内部,可以用typeof来设定变量。

#define min(X,Y) ( { \

typeof(X) x_ = X; \
typeof(Y) y_ = Y; \

(x_ < y_) ? x_ : y_; } )


另外要注意的是,宏在操作符优先级可能会有问题,发生这种情况,可使用括号来设定优先级。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值