我刚接触 C++ 编程。为了帮助我编写代码,使用哪些命令行开关是个好主意?
我正在通过编写一些小程序来学习 C++。我希望我的代码尽可能好(以牺牲开发和编译时间为代价)。例如,警告可移植性问题、未定义行为和非惯用代码的开关会很有用。
我知道-Wall -Werror
。还有其他人吗?
用于代码质量的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/处于测试阶段,我认为这只是询问您编写的学习代码是否有用的地方。