若有以下程序,则运行后的输出结果是( )
#include <stdio.h>
#define N 2
#define M N + 1
#define NUM (M + 1) * M / 2
int main()
{
printf("%d\n", NUM);
return 0;
}
A: 4 B: 8 C: 9 D: 6
这题不是挺简单的嘛?
N = 2
M = N + 1 = 2 + 1 = 3
NUM = (M+1) * M / 2 = (3+1) * 3 / 2 = 4 * 3 / 2 = 6
完事儿,选D
那到底*NUM到底是不是6呢?我们在编译器上验证一下
答案是 8,那这是为什么呢?
宏定义一种抽象,它根据一系列预定义的规则替换一定的文本模式。
注意动词“替换”,因此宏定义是不会真正“计算”任何东西,仅仅是“替换”而已。
宏定义仅仅是替换而已,那么这题实际在代码中是这样替换的:
所以NUM --> 8,选B
宏定义计算只做替换,不做计算,也不做表达式求解。