📜  C |宏和预处理器|问题14(1)

📅  最后修改于: 2023-12-03 15:13:46.997000             🧑  作者: Mango

C | 宏和预处理器 | 问题14

在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语言中是十分有用的工具,但在使用时也需要仔细思考,谨慎处理。