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

如何让GCC在C99模式下对无返回值的main()抛出编译错误

解决GCC不报错int main()无返回语句的问题

问题原因

C99标准明确规定:如果main函数的返回类型是int,且函数结尾没有显式的return语句,编译器会自动插入return 0;。因此你使用-std=c99编译时,GCC不会将这种情况判定为问题,即使开启-Wreturn-type和-Werror也无法触发报错。

解决方法

要强制GCC对无返回语句的main函数抛出编译错误,需要切换到C89标准编译:

  • 编译命令:gcc -Wall -Wextra -std=c89 -Wreturn-type -Werror -pedantic-errors a.c
  • 或使用GNU扩展的C89标准:gcc -Wall -Wextra -std=gnu89 -Wreturn-type -Werror -pedantic-errors a.c

验证效果

编译你提供的代码:

#include<stdio.h>

int main(){
   printf("Hi");
}

使用上述C89标准的编译命令后,GCC会触发类似如下的编译错误:

error: control reaches end of non-void function [-Werror=return-type]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 15:22:02