基于两数最大值函数实现四数求最大值,解决C代码编译报错问题
问题原因&修复方案
报错原因
- 第一个报错
expected expression before int:函数调用时不需要给参数加类型声明,只有函数定义、声明阶段才需要标注参数类型。你在调用max2时写的max2(int a, int d);属于语法错误,额外加的int关键字不符合函数调用的语法规则,编译器无法识别就抛出了该错误。 - 第二个报错
too few arguments to function max2:属于上一个语法错误引发的连锁报错,编译器解析错误的参数写法时,误判了你传入的参数数量,修复第一个问题后该报错会自动消失。
额外隐藏问题
你定义的max2、max4函数返回值类型标注为int,但函数体内没有任何return语句,不符合C语言的语法要求,要么将返回值类型改为void(表示无返回值),要么补充返回最大值的逻辑。
修复后可运行代码
保留原逻辑的修改版本
#include <stdio.h> // 调整返回值为void,匹配当前直接打印的逻辑 void max2(int a, int b) { if(a > b) { printf("%d is the max\n", a); } else { printf("%d is the max\n", b); } } void max4(int a, int b, int c, int d) { if(a > b) { if(a > c) { // 调用函数仅传变量,不需要加类型声明 max2(a, d); } else { max2(c, d); } } else { if(b > c) { max2(b, d); } else { max2(c, d); } } } int main() { max4(666,853,987,42); return 0; }
更规范的函数实现版本(函数仅做计算,不耦合打印逻辑)
#include <stdio.h> int max2(int a, int b) { return a > b ? a : b; } int max4(int a, int b, int c, int d) { // 利用嵌套调用简化逻辑,无需多层if判断 return max2(max2(max2(a, b), c), d); } int main() { int max_val = max4(666,853,987,42); printf("%d is the max\n", max_val); return 0; }
内容的提问来源于stack exchange,提问作者SamiKode
相关产品推荐
相关产品推荐

