c语言宏定义给数字加括号是为了什么如:#define DI_INPUT_NUM (11)

如果是替代的话,后面函数应该没括号,可是还有事儿怎么回事!

#define DI_INPUT_NUM 11+2
int a = DI_INPUT_NUM * 3
那么a = 11+2 *3 = 11+6 =17

#define DI_INPUT_NUM (11+2)
int a = DI_INPUT_NUM * 3
那么 a =(11+2)*3 = 13*3=39

上面2中情况可以看到第二种才是宏定义的本意。
所以习惯性会加个括号,其实空定义不管是数字或者表达式,都必须加括号,这是编程的很好习惯。
如果因为上面这些没有加括号情况导致问题,在型项目中这类问题是非常困难定位的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-08-10
宏定义有很多问题,因为它是直接替换,经常带来和想法不符的现象,所有加个括号是个好习惯。
比如
#define SUM 3+5

int x = 10 * SUM; 问题就来了,结果是被替换成 x = 10 * 3 + 5; 和本意 x = 10 * (3+5) 不符。

#define SUM (3+5)
这样就好了。所以养成一个好的书写习惯,可以使你少范错误。
第2个回答  2012-08-10
貌似加不加括号是一样的。。。比如
uchar ISendByte(uchar sla,uchar c)
{
Start_I2c(); /*启动总线*/
SendByte(sla); /*发送器件地址*/
if(ack==0)return(0);
SendByte(c); /*发送数据*/
if(ack==0)return(0);
Stop_I2c(); /*结束总线*/
return(1);
}
你看哈=。=这里的话 return 后面也加了括号=。=
第3个回答  2012-08-10
加括号的目的是为了适应不同的使用场合。
这个宏定义的目的是用 DI_INPUT_NUM 替代数字 11 。
你说的函数。。。我不明白是怎么回事。
第4个回答  2012-08-10
为了更严谨的。。。宏如果用不好的话,可能会产生奇怪的结果!
相似回答