5

我刚接触 C++ 编程。为了帮助我编写代码,使用哪些命令行开关是个好主意?

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

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

4

1 回答 1

7

用于代码质量的gcc开关列表

  • -Wall对于最常见的警告
  • -Wextra对于仍然有用的更多警告(这曾经只是-W,如果您看到该开关提到它与此相同)。
  • -Werror通过将警告变为错误来强制您修复警告
  • -std=c++11或指定语言标准或方言的任何内容(-ansi有时使用的 switch 对于每种支持的语言都等于 some -std=X,但我已经看到不同的地方记录了不同的标准......)。
  • -pedantic或者-pedantic-errors告诉gcc严格遵守标准

我认为上面没有启用的开关(感谢评论者!),并且特别是在学习时会有所帮助,以帮助了解隐式发生的事情。在 gcc 文档中阅读更多关于 gcc 的警告开关

  • -Wconversion强制您使用显式强制转换,例如在存在值溢出风险和获得损坏值的情况下
  • -Wsign-conversion当由于无符号转换而存在价值被破坏的风险时,强制您使用显式强制转换

但是,gcc不是理想的工具,也不是您应该使用的唯一工具。

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

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

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

同行评审

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

于 2013-10-03T05:41:35.800 回答