题目
宏求两数较大值(注意括号)
思路
本题用宏定义求两数较大值,并理解括号的重要性。
#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