【问题标题】:How to turn on gcc warnings for a forgotten return statement?如何为忘记的返回语句打开 gcc 警告?
【发布时间】:2011-04-13 20:26:43
【问题描述】:

如何为忘记的 return 语句打开 gcc 警告?

它应该在以下情况下警告我:

int foo() {
  std::cout << "haha";
}

我知道-Wall 会打开该警告,但它会启用太多其他警告。

【问题讨论】:

  • 你试过 -Wextra / -ansi / -pedantic 吗?
  • -Wall 启用了太多其他警告?这是第一次。
  • 如果您的 -Wall 打开太多,另一种方法是切换不符合您的编码风格的特定选项。虽然我很想知道您有哪些没有就代码中的问题提供有价值的反馈。
  • @Jens Gustedt:另一种可能性是重写代码以减少警告的数量。编译时打开大量错误检查但没有警告的代码非常有用。保持这种方式比保持这种方式容易得多。

标签: c++ c gcc


【解决方案1】:

根据gcc的online documentation-Wall开启:

      -Waddress   
      -Warray-bounds (only with -O2)  
      -Wc++0x-compat  
      -Wchar-subscripts  
      -Wenum-compare (in C/Objc; this is on by default in C++) 
      -Wimplicit-int (C and Objective-C only) 
      -Wimplicit-function-declaration (C and Objective-C only) 
      -Wcomment  
      -Wformat   
      -Wmain (only for C/ObjC and unless -ffreestanding)  
      -Wmissing-braces  
      -Wnonnull  
      -Wparentheses  
      -Wpointer-sign  
      -Wreorder   
      -Wreturn-type  
      -Wsequence-point  
      -Wsign-compare (only in C++)  
      -Wstrict-aliasing  
      -Wstrict-overflow=1  
      -Wswitch  
      -Wtrigraphs  
      -Wuninitialized  
      -Wunknown-pragmas  
      -Wunused-function  
      -Wunused-label     
      -Wunused-value     
      -Wunused-variable  
      -Wvolatile-register-var 

其中,-Wreturn-type 似乎可以解决问题:

每当函数定义为返回类型默认为 int 时发出警告。另外警告返回类型不是 void 的函数中没有返回值的任何 return 语句(从函数体的末尾脱落被认为返回没有值),以及 return 语句在返回类型为 void 的函数中使用表达式。

但是,如果打开 -Wall 会使您的代码出现太多警告,我建议您修复您的代码!

【讨论】:

    【解决方案2】:

    总是使用:

    gcc -g -ansi -pedantic -Wall -o

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-16
      • 2018-03-18
      • 2019-03-27
      • 2020-10-03
      相关资源
      最近更新 更多