所以我浪费了一个小时试图找出我的程序崩溃的原因。碰巧,我忘了把函数的返回语句放进去。
功能大致如下:
structType name(2 parameters){
.....
}
我习惯了警告,返回语句丢失了。为什么不在这里这样做,我怎么能打开这个功能呢?
[我在C中编码]编辑:使用GCC
省略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() { }
^~~