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

问题描述 投票:0回答:1

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

功能大致如下:

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

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

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

c gcc compiler-warnings
1个回答
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() { }
 ^~~
© www.soinside.com 2019 - 2024. All rights reserved.