题目

使用带参数的预处理宏定义 MAX(a, b) 求两数的较大值,并在程序中演示宏参数加括号对运算优先级的重要性。

输入格式:一行输入两个整数 a 和 b,以空格分隔。

输出格式:输出两个整数中的较大者。

数据范围与约定:-105 ≤ a, b ≤ 105。

思路与算法

1. 严格加括号规范
标准写法:#define MAX(a, b) ((a) > (b) ? (a) : (b))。不仅每个形参要加括号,整个三目表达式外层也必须加括号,防止表达式结合次序混乱。

2. 宏的副作用缺陷
由于宏是纯文本展开,若参数包含自增(如 MAX(x++, y)),表达式会导致同一变量被自增两次,这也是现代 Java 语言推荐内联函数 inline 的原因。

完整程序

import java.util.Scanner;

public class Main {
    // 模拟宏定义函数:使用 static inline 或普通方法实现 max
    public static int max(int a, int b) {
        return a > b ? a : b;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        System.out.println(max(a, b));
    }
}

运行示例

输入:

3 9

输出:

9