所以我只花了一个小时就试图弄清为什么我的程序崩溃了。碰巧的是,我忘记放入函数的return语句。
该功能大约如下:
structType name(2 parameters){
.....
}
我习惯于收到警告,说return语句丢失了。 为什么在这里没有这样做?我如何打开该功能?
[我用C语言编写代码] 编辑:使用GCC
答案 0 :(得分:7)
为什么为什么省略return
语句没有警告是因为它不是“错误的”-C标准明确允许它,并且这样的程序定义明确;仅,如果实际未返回任何值,则不要使用该返回值。
无论默认情况下发出什么警告,大多数都是C标准将其称为违反约束的警告-合格的编译器必须诊断这些警告。因此,使用-pedantic-errors
或-std=c17
或类似的东西根本不会做任何事情,因为这会使编译器在遵循以下规则时变得更加古怪(即更符合诊断要求)。毕竟这还可以的C标准。
在GCC中,可以使用-Wreturn-type
控制警告,也可以通过-Wall
启用警告。 (为什么不使用-Wall
?!):
% echo 'int foo() { }' > noreturn.c && gcc -c -Wreturn-type noreturn.c
noreturn.c: In function ‘foo’:
noreturn.c:1:1: warning: control reaches end of non-void function [-Wreturn-type]
int foo() { }
^~~