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

标签 c gcc compiler-warnings

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

函数大致如下:

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/

相关文章:

c++ - 为什么 C4265 Visual C++ 警告(虚拟成员函数和无虚拟析构函数)默认关闭?

compiler-errors - D中有一种静态打印吗?

c - 通过管道将数据传递给 C 程序

c - 具有两个 double 的结构的对齐方式为 4,即使 double 对齐为 8(32 位)

unix - gcc 条件编译

c - 如何在 C 中抑制 "unused parameter"警告?

java - 验证变量为空警告

c - 将字符串转换为 double 的简单代码不起作用

c - 在 C 循环中使用 asprintf 时发生内存泄漏

c - stat()不适用于父目录