战地2加入就闪退:#define定义常量加括号什么意思

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 05:49:53
比如
#define MAX(10)是不是和
#define MAX 10是一样的?为什么要加括号呢?
是不是没什么区别还是有什么区别啊?

楼上说得对。
楼主我给你举个例子,你就明白了

#define ADD1 a+b
#define ADD2 (a+b)

void main()
{
int a=10;
int b=20;

// 你想计算(10+20)*3

int c, d;
c = ADD1*3;
d = ADD2*3;
}

经过宏替换,就变成了下面的样子:

c = a+b*3;
d = (a+b)*3;

c的结果就是错误的。

可以对一些常见的变量,字符串等,进行宏定义,系统在编译期间,就会自动替换
如果不进行宏定义,一般如果此类变量,字符串等,需要修改,就需要对源文件中它们出现的地方一一修改,效率比较低,而此种宏定义后,只需要修改一次,实现批量修改,效率较高.而且有些数字或字符很麻烦,每次都要输入,就显得很繁琐,而且容易出错,而采取此宏定义,就很方便和易于维护.
[例子]
#define PI 3.1415926
[注意事项]
(1) 宏定义中的变量,约定俗成用大写,以此与小写的普通变量区分开来.当然如果你故意小写,也是合法的.不过如果你想让你写的程序具有高可读性,那最好遵守此约定.
(2) #define的行尾,没有分号”;”,有些人不注意,会画蛇添足地加上.有些公司招聘时候的笔试,也会考察这个细节.
(3) 如果后面的宏定义中的变量和前面的有内在联系,那么后面的宏定义变量最好用前面的表示
[例子]
#define PI 3.1415926
#define RADIUS 5
而在表达该圆的面积的时候,就可以用下面的表示了:
#define AREA ((PI)*( RADIUS)*( RADIUS))
//此处加括号是为了避免后面提到的一种边界效应

#define是宏定义,在使用的时候只是用MAX替换了10

#define TEST1 a+b
#define TEST2 (a+b)

void main(void)
{
int a, b, c, d;
c = TEST1; //相当于 c = a+b;
d = TEST2; //相当于 d = (a+b);
}

这样写是防止 忽略运算符优先级而导致的错误。

上面好象是定义一个10个元素的数组把
下面好象是定义一个MAX
然后把10付给它

防止非正常的展开。