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

时间:2018-09-11 06:45:04

标签: c gcc compiler-warnings

所以我只花了一个小时就试图弄清为什么我的程序崩溃了。碰巧的是,我忘记放入函数的return语句。

该功能大约如下:

structType name(2 parameters){
     .....
}

我习惯于收到警告,说return语句丢失了。 为什么在这里没有这样做?我如何打开该功能?

[我用C语言编写代码] 编辑:使用GCC

1 个答案:

答案 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() { }
 ^~~