#define后面数字外的括号是不是多余的呢
请教一下看下面的一个实例,
#define OS_MAX_TASKS (4) //每个新建项目必须调整
我看到那个数字4是用括号包括起来的。
我在想,这个括号还有什么用,不用括号,不也一样可以用吗?为什么还要加括号。
#define OS_MAX_TASKS 4 //每个新建项目必须调整
/////////////////////// 边界效应 有时候怕出问题
比如
#define ARUBA 1
#define ARUBB 2
#define ARUBC ARUBA+ARUBB
...
int main()
{
...
int d;
d = 26 * ARUBC / 34;
...
return(0);
}
...
这样展开后就可能出现歧义
我本来是想让ARUBC等于ARUBA+ARUBB
结果实际上并不是这样,加上括号就好了 我的习惯,有数学_运算,不管默认优先级对不对都加括号
#define ARUBA 1
#define ARUBB 2
#define ARUBC (ARUBA+ARUBB) 回复【2楼】aheadlead 高中SB
-----------------------------------------------------------------------
#define ARUBA 1
#define ARUBB 2
#define ARUBC ARUBA+ARUBB
...
int main()
{
...
int d;
d = 26 * ARUBC / 34;
...
return(0);
}
...
//////////////////////////////
变成
#define ARUBA (1)
#define ARUBB (2)
#define ARUBC ARUBA+ARUBB
...
int main()
{
...
int d;
d = 26 * (1)+(2) / 34;
...
return(0);
}
...
我想这照样不会因为在数字外面加上括号,而产生什么好的结果 来
照样出错 这是 时间触发 这本书的 作者用的方法,还有好多书上,资料上,以及官方文档 上面好似也有这样的用法。
可是,我就是想不透,这样用的作用。而且,在同一本书上,有的地方有括号,有的地方就没加括号,好象都行的样子。 define只是字符替换,没有赋值作用,需注意用处的替换效果 写上会稳妥一点吧,计算机的计算顺序是个很讨厌的东西。 如果把4换成 5*6 呢?不一定放常数,有可能放表达式. 一个原因如2楼所说的那样,可能会产生歧义,所以要在#define ARUBC ARUBA+ARUBB那边加上括号。
另外是,由于上诉原因,要保证代码风格的统一性,所以要在#define 后面的定义都加括号,这是一个很重要也是良好的习惯:
你不能保证每次写#define A 4的时候都不加括号,#define C (A+B)的时候都记得加上括号。写上一百遍就可能失误,一个失误就出大问题了,而且还非常不好查。 当然不是多余的喽,要是你后面是一个公式,你不加上括号的话,他就只是取公式最天始的那个变量了。会出错的。 回复【2楼】aheadlead 高中SB
-----------------------------------------------------------------------
#define ARUBA 1
#define ARUBB 2
#define ARUBC ARUBA+ARUBB
...
int main()
{
...
int d;
d = 26 * ARUBC / 34;
...
return(0);
}
...
//////////////////////////////
变成
#define ARUBA (1)
#define ARUBB (2)
#define ARUBC ARUBA+ARUBB
...
int main()
{
...
int d;
d = 26 * (1)+(2) / 34;
...
return(0);
}
...
我想这照样不会因为在数字外面加上括号,而产生什么好的结果 来
照样出错
回复【4楼】zhwm3064沉伦蜗牛
-----------------------------------------------------------------------
#define ARUBA 1
#define ARUBB 2
//我的意思是应该在这里加括号 这样这个括号对宏展开后的结果就有影响了
#define ARUBC (ARUBA+ARUBB)
...
int main()
{
...
int d;
d = 26 * ARUBC / 34;
...
return(0);
}
...
求问如何在论坛里面加粗文字 回复【9楼】ddljdd
一个原因如2楼所说的那样,可能会产生歧义,所以要在#define arubc aruba+arubb那边加上括号。
另外是,由于上诉原因,要保证代码风格的统一性,所以要在#define 后面的定义都加括号,这是一个很重要也是良好的习惯:
你不能保证每次写#define a 4的时候都不加括号,#define c (a+b)的时候都记得加上括号。写上一百遍就可能失误,一个失误就出大问题了,而且还非常不好查。
-----------------------------------------------------------------------
正如这位高手所说
有些时候查了一天的错误发现是宏定义的错 人都快给气死了。。。。
总之这是个好习惯 不加白不加。。。加了也没损失。。。硬说要有损失,估计就是编译得久一些罢了吧?^_^ 学习了,习惯很重要 没有多余,宏定义关键是怕使用时优先级出错,加了也不影响处理速度
页:
[1]