如何让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
相关产品推荐
相关产品推荐

