如何让编译器警告我缺少 return 值?
How do I make the compiler warn me about missing return value?
所以我只是浪费了一个小时试图找出我的程序崩溃的原因。碰巧的是,我忘了输入函数的 return 语句。
函数大概如下:
structType name(2 parameters){
.....
}
我习惯于收到警告,即缺少 return 语句。
为什么这里没有这样做,我怎样才能打开该功能?
[我用 C 编写代码]
编辑:使用 GCC
为什么 没有因省略 return
语句而发出警告的原因是它不是 "wrong" - C 标准明确允许它,并且这样的程序是明确定义的;只是,如果 none 实际上是 returned,则您不能使用 return 值。
无论默认情况下发出什么警告,大部分都是 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() { }
^~~
所以我只是浪费了一个小时试图找出我的程序崩溃的原因。碰巧的是,我忘了输入函数的 return 语句。
函数大概如下:
structType name(2 parameters){
.....
}
我习惯于收到警告,即缺少 return 语句。 为什么这里没有这样做,我怎样才能打开该功能?
[我用 C 编写代码] 编辑:使用 GCC
为什么 没有因省略 return
语句而发出警告的原因是它不是 "wrong" - C 标准明确允许它,并且这样的程序是明确定义的;只是,如果 none 实际上是 returned,则您不能使用 return 值。
无论默认情况下发出什么警告,大部分都是 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() { }
^~~