哪些g ++开关可以帮助我编写好的代码,比如-Wall -Werror?

时间:2013-10-03 05:13:59

标签: c++ g++

我刚进入C ++编程。哪个命令行开关是一个好主意,以帮助我编码?

我正在通过编写一些小程序来学习C ++。我希望我的代码尽可能好(以开发和编译时为代价)。例如,警告可移植性问题的开关,未定义的行为和非自动代码将是有用的。

我知道-Wall -Werror。还有其他人吗?

1 个答案:

答案 0 :(得分:7)

用于代码质量的 gcc 列表

  • -Wall表示最常见的警告
  • -Wextra了解更多仍然有用的警告(过去只有-W,如果您看到该开关提到它与此相同)。
  • -Werror强制您通过将警告变为错误来修复警告
  • -std=c++11或指定a language standard or dialect的任何内容(有时会使用-ansi切换,对于每种支持的语言,等于某些-std=X,但我看到的不同在不同地方记录的标准......)。
  • -pedantic-pedantic-errors告诉 gcc 严格遵守标准

我相信上面没有启用的开关(感谢评论者!),特别是在学习时会有所帮助,以帮助隐含地看到发生的事情。在gcc doc中了解warning switches of gcc的更多内容:

  • -Wconversion强制您使用显式强制转型,例如在存在价值溢出风险且价值受损的情况下
  • -Wsign-conversion强制您在由于未签名签名的转化而导致价值受损的风险时使用显式广播

但是, gcc 不是理想的工具,或者只是您应该使用的工具。

使用除编译器之外的其他工具!

非常重要的工具是valgrind,它可以分析正在运行的程序的内存使用情况,并且在将来遇到内存损坏问题时也会想要使用它。还有valgrind的GUI(检查你的Linux软件包是否易于安装),最新版本的Qt Creator在Linux上有非常好的valgrind集成。

然后是静态代码分析器。 Google用于“C ++代码分析器”或“C ++ lint”,并检查Linux发行版的软件存储库(假设您使用的是Linux,如果没有,请考虑在VM中使用一个)。一个可能性是C++ Lint,另一个是Clang Static Analyzer,尽管我自己也没有尝试过

同行评审

没有什么比学习更有价值了,因为让你的代码同行评审。但是,SO不适合进行简单审核,但是https://codereview.stackexchange.com/处于测试阶段,我认为只是询问您所编写的学习代码是否有用的地方。