我正在学习C ++,并试图编写好的代码。 我目前正在使用lof编译器标志,例如
-Wextra -Wall -pedantic -Werror -Wfatal-errors -Wcast-qual -Wcast-align -Wconversion -Wdouble-promotion -Wfloat-equal -Wshadow -Wpointer-arith -Weffc++ -ansi -Wstrict-aliasing
我刚刚了解到在C ++ 11中不再使用关键字new
和delete
。但是,我使用它时没有任何警告。
是否有一些标志用于确保良好的C ++ 11风格?
答案 0 :(得分:5)
首先,你必须意识到你的编译器永远不会完全执行好的风格。
但是,您可以使用两种技术让编译器帮助强制执行您自己的样式:警告(可以在命令行或pragma中传递)和poison pragma。< / p>
但是,很难管理每个编译器版本可用的确切警告集,因此我创建了a list of warnings。请注意,对clang的支持是最小的,它的警告通常不如gcc的实际,尽管他们的营销很棒;另外,不可能检测到你使用哪个版本的clang来解决bug(特征检测宏相当无价值)。
我也做了a list of poison。
此外,我还有一些makefile魔法可以确保将上述两种技术应用于每个适用的文件以及进行其他检查。
但应注意,每个应用程序都有不同的需求,因此不应按原样使用这些标头。例如,很少有应用程序像我一样想要毒害std::string
。