如何使g ++强迫我遵守C ++标准

时间:2015-08-05 11:11:20

标签: c++ gcc compilation g++ standards

我正在努力学习以前没有经验的C ++或C,我看到有些培训材料有时会教我C编码而不是C ++。

由于我没有足够的知识来辨别这些书是否试图教我正确的C ++,我想我可以在g ++编译器上设置一些参数来解决这个问题。 所以我的问题是:

如何在Windows中设置g ++编译器,这样如果我写的不是纯C ++标准,他就不会编译?

非常感谢提前

2 个答案:

答案 0 :(得分:4)

没有编译器是完美的(大多数人不会100%实现法律规定的任何特定C ++标准),但你可以将你的警告提高,然后让它们出错:

g++ source.cpp -Wall -Wextra -pedantic -Werror

这会导致大多数非标准行为被彻底拒绝;但是,它也会将一些警示故事转化为错误,这些错误可能是您想要的,也可能不是。

使用您的最佳判断来决定是否要使用-Werror。就个人而言,我推荐它,除非你被迫不要求包含写得不好的第三方库标题。

但是,如果他们妨碍你,你总是可以排除特定的警告;例如通过附加-Wno-unused-variable

有关可用的警告开关,请参阅工具链文档。

赢得做的是检测符合标准的C ++代码中的C语言。那是不可能的。
为此,您有更好的书籍,代码审查会议和良心。 :)

答案 1 :(得分:2)

  

如何在Windows中设置g ++编译器,这样如果我写的不是纯粹的C ++标准,他就不会编译?

你做不到。我同意@Lightness在答案中所说的大部分内容。编译器的工作不是警告您可能调用未定义行为的所有方法(其中一些甚至在编译时都无法检测到)。

然而,我不同意他的答案部分,他将-Wall -Wextra -pedantic等同于"警告提高了#34;

从GCC手册(v5.2)中引用选项的实际含义,强调我的:

  

-Wall

     

这样可以所有警告关于某些用户认为有问题的构造,以及容易避免 [...]

     

-Wextra

     

这样可以启用一些未被-Wall启用的额外警告标志

     

-pedantic

     

发出严格的ISO C和ISO C ++ [...]

所要求的所有警告

并非所有构造都是"不是纯粹的C ++"实际上要求标准的警告。有许多事情甚至-Wall -Wextra -pedantic都无法保护你,很多事情很可能是编程错误但标准未涵盖(例如-Wsign-conversion-Wswitch-default,{{1} },-Wlogical-op ...)

所以这里的建议是,拿起编译器手册,检查所有可用的警告选项,选择你可以使用的最严格的集合。定期重复这个过程。