题目

宏求两数较大值(注意括号)

思路

本题用宏定义求两数较大值,并理解括号的重要性。

#define MAX(a,b) ((a)>(b)?(a):(b)) 演示带参宏;参数若写表达式会被求值两次,带副作用的实参可能出错,正文可对照安全写法。

解题分析

宏参数和整体表达式都要括号,否则 MAX(a,b+1) 会展开成错误优先级。函数宏不如 inline 函数易调试,但宏在编译期展开。

完整程序

#include <stdio.h>

#define MAX(a, b) ((a) > (b) ? (a) : (b))

int main(void)
{
    int x, y;
    if (scanf("%d %d", &x, &y) != 2) {
        return 1;
    }
    printf("%d\n", MAX(x, y));
    return 0;
}

运行示例

输入:

3 9

输出:

9

其它写法

下面每种写法都是完整程序,输入输出格式与正文一致,便于对照。

用 inline 函数代替宏

程序:

#include <stdio.h>

static int max2(int a, int b)
{
    return a > b ? a : b;
}

int main(void)
{
    int x, y;
    if (scanf("%d %d", &x, &y) != 2) {
        return 1;
    }
    printf("%d\n", max2(x, y));
    return 0;
}

运行示例

输入:

3 9

输出:

9