You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言编译出现函数参数默认int类型的[-Wimplicit-int]警告如何解决

C程序编译告警修复说明

触发当前告警的直接原因

你遇到的两条告警,根源是saberi函数使用了C语言旧标准的隐式int参数规则编写:

int saberi(sum, b){
    return sum + b;
}

按照现代C语言(C99及之后版本)的语法要求,函数定义的所有参数都必须显式标注类型;如果不写参数类型,编译器会默认把sum和b推断为int类型,这就触发了-Wimplicit-int的编译告警。

第一步:消除当前告警

直接给两个参数补上显式的int类型标注即可,修改后的函数代码:

int saberi(int sum, int b){
    return sum + b;
}

修改完成后重新编译,两条隐式int的告警就会完全消失。

后续调试需要处理的关联逻辑bug

这些问题不会触发编译告警,但会导致程序运行结果完全错误或者直接崩溃,可参考以下要点排查:

  • 给saberi传的参数类型错误:当前代码里写的是(*saberi)(suma, *argv[i]),*argv[i]是参数字符串第一个字符的ASCII编码,不是需要累加的整数值,需要用atoi(argv[i])把字符串格式的参数转成整数再传入。
  • 参数下标自增逻辑重复:判断-b/-s标记的时候用了argv[i++]做比较,后面的do-while循环内部又执行了一次i++,会导致参数下标连续跳两次,漏读有效参数。
  • 循环终止条件逻辑写反:当前do-while的判断条件是strcmp(...) != 0 || i < argc,使用了逻辑或,只要下标没越界就会一直循环,最终会越界访问argv数组。正确的终止逻辑应该是同时满足「下标在有效参数范围内」「没碰到下一个参数标记」两个条件,也就是把逻辑或改成逻辑与。
  • 字符串拼接的传参逻辑错误:调用dodaj函数的时候,会把-s/-b这类参数标记字符串也拼进去,实际应该跳过标记本身,只拼接标记后面的有效字符串参数。

内容的提问来源于stack exchange,提问作者qu4lizz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 09:36:04