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

如果是替代的话,后面函数应该没括号,可是还有事儿怎么回事!... 如果是替代的话,后面函数应该没括号,可是还有事儿怎么回事! 展开
 我来答
百度网友1cca13b29af
推荐于2017-11-28 · 超过19用户采纳过TA的回答
知道答主
回答量:72
采纳率:0%
帮助的人:50.1万
展开全部
#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中情况可以看到第二种才是宏定义的本意。
所以习惯性会加个括号,其实空定义不管是数字或者表达式,都必须加括号,这是编程的很好习惯。
如果因为上面这些没有加括号情况导致问题,在型项目中这类问题是非常困难定位的。
byzxybd
2012-08-10 · TA获得超过455个赞
知道小有建树答主
回答量:731
采纳率:100%
帮助的人:427万
展开全部
宏定义有很多问题,因为它是直接替换,经常带来和想法不符的现象,所有加个括号是个好习惯。
比如
#define SUM 3+5

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

#define SUM (3+5)
这样就好了。所以养成一个好的书写习惯,可以使你少范错误。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
CT_36
2012-08-10 · TA获得超过482个赞
知道小有建树答主
回答量:695
采纳率:0%
帮助的人:191万
展开全部
貌似加不加括号是一样的。。。比如
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 后面也加了括号=。=
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wszxxhd
2012-08-10 · TA获得超过4408个赞
知道小有建树答主
回答量:528
采纳率:0%
帮助的人:405万
展开全部
加括号的目的是为了适应不同的使用场合。
这个宏定义的目的是用 DI_INPUT_NUM 替代数字 11 。
你说的函数。。。我不明白是怎么回事。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
宏讯时Y
2012-08-10 · TA获得超过169个赞
知道小有建树答主
回答量:521
采纳率:100%
帮助的人:213万
展开全部
为了更严谨的。。。宏如果用不好的话,可能会产生奇怪的结果!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式