📅  最后修改于: 2023-12-03 15:13:46.997000             🧑  作者: Mango
在C语言中,宏和预处理器是经常用到的工具。 在这里,我们将讨论问题14和它们的联系。
假设我们有以下代码:
#define MAX(x,y) (x>y?x:y)
int main(void)
{
int a = 3, b = 6, c = 1;
printf("%d\n", MAX(a+b, c));
return 0;
}
请问输出结果是多少?
由于定义了 MAX
宏,调用 MAX(a+b, c)
时,编译器会将其展开为 (a+b>c?a+b:c)
。
因此,上述代码中的 printf
语句实际上相当于 printf("%d\n", a+b>c?a+b:c);
。根据运算符优先级,a+b
会首先被计算,因此 printf
会输出 9
。
所以问题14的正确答案为 9
。
这个问题的重点在于展开宏时的优先级问题,需要注意宏展开的优先级可能和代码中本来的优先级不同,需要仔细推敲。
总的来说,宏和预处理器在C语言中是十分有用的工具,但在使用时也需要仔细思考,谨慎处理。