C语言中#define后的算术运算

先说结论:

#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.

猜你喜欢

转载自blog.csdn.net/m0_75186846/article/details/132178355