#define语句后面加括号VS不加括号

当定义“常数宏”的时候区别不大,如

#define MAX_NUM x         //x为参数
#define MAX_NUM ( x )    //宏的参数可以用圆括号括起来,此时带参数的宏外形与函数非常相似

但当定义是“类函数宏”时,如

#define  A(x)   x+x
#define  B(x)  (x+x)

printf("%d\n",A(x)*A(x) );    //35
printf("%d\n",B(x)*B(x) );    //100

就必须加括号

 

(1)加括号的情况

在编写一个简单的MAX宏时,我们需要加上足够括号才能保证结果尽可能的正确。
#define MIN(X,Y) ((X)>(Y)?(X):(Y))
在宏定义中最好全部使用大写字母,以区别正规的代码。

 

(2)不加括号的情况

用预处理指令#define声明一个常数,用以表明1年中有多少秒。
#define SECONDS_PER_YEAR (60*60*24*365)UL
单纯这一条宏定义是没有什么错误的,但如果替换到源代码中就会出现语法错误(不应该加括号)。
在整数值后面添加L或者l(小写的L,为了避免视觉错误最好使用L),表示此整数为long整型。
在整数值后面添加U或者u,表示此整数为unsigned整型。
如果各添加一个,也就是都在整数值直接加上后面加上U和L,那就表示unsigned long int型。
数值后面直接加U或者L才行,前边加上括号就不行了。
正确的写法应该是:
#define SECONDS_PER_YEAR 60*60*24*365UL
或者
#define SECONDS_PER_YEAR 60*60*24*365LU
L和U不分前后,但从可读性的角度来讲在数值后面加UL更符合我们的阅读习惯。


部分原文:https://blog.csdn.net/niu91/article/details/17894379 

你可能感兴趣的:(通识)