c语言宏定义只能在最前面吗,C语言宏定义注意事项

本文探讨了C语言宏定义的一些关键注意事项,包括字面替换、使用括号防止错误计算、避免副作用、在if语句中的正确用法以及可变参数宏的处理。举例说明了如何避免常见问题,确保宏的正确使用。
摘要由CSDN通过智能技术生成

本文翻译总结自《Advanced Mac OS X Programming 》第一章

1. 最核心的思想就是宏只是纯粹字面替换:

#define FIVE 5

int max = FIVE;

2. 变量要加括号:

#define SQUARE(x)  x*x,  在计算SQUARE(3+5)的时候就会被替换成:3+5*3+5,正确的定义应该是#define SQUARE(x)  (x)*(x)

3. 避免使用有副作用的运算,如SQUARE(i++),因为你不不知道会被展开成什么。

4. 在if中使用宏:

#define LOG_ERROR(desc)\

error_count++;\

fprintf(stderr, "Found an error '%s' at file %s, Line %d\n",\

desc, __FILE__, __LINE__)

在if代码中如果这样使用,就OK:

if(returnVal != 0){

LOG_ERROR("Here is an error!);

}

但是如果省略了大括号,将出现问题:

if(returnVal != 0) LOG_ERROR("Here is an error!);

代码将被展开为:

if(returnVal != 0)

error_count++;

fprintf(stderr, "Found an error

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值