如何让编译器警告我缺少返回值?

RIJ*_*JIK 0 c gcc compiler-warnings

所以我浪费了一个小时试图找出我的程序崩溃的原因.碰巧,我忘了把函数的返回语句放进去.

功能大致如下:

structType name(2 parameters){
     .....
}
Run Code Online (Sandbox Code Playgroud)

我习惯了警告,返回语句丢失了.为什么不在这里这样做,我怎么能打开这个功能呢?

[我在C中编码]编辑:使用GCC

Ant*_*ala 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() { }
 ^~~
Run Code Online (Sandbox Code Playgroud)