所以我只是浪费了一个小时试图找出我的程序崩溃的原因。碰巧的是,我忘了放入函数的返回语句。
函数大致如下:
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() { }
^~~
关于c - 如何让编译器警告我缺少返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52270122/