先说结论:
#define后定义的计算只是进行简单的代数换算,连括号都不会加。
我们来看一道题目:
#define N 2
#define M N + 1
#define NUM (M + 1) * M / 2
int main()
{
printf("%d\n", NUM);
return 0;
}
// 不太了解 define 的其实也可以知道,
// 这里 N=2 ,M=N+1 , NUM=(M + 1) * M / 2
// 我们就可以得出 M=3 , NUM = 4*3/2 = 12/2 = 6.
但真的是如此吗,这题给小学生做可能很简单,但是给像我这样的大学生做我只能说上难度了。
V S 启 动 !
很可惜,我们失败了!
下面请看原因:
#define后定义的计算只是进行简单的代数换算,连括号都不会加,这里M被换成了N+1,
依旧保留了M+1外的括号,但后面 * M / 2 ,并不会变成 *(N + 1)/ 2.