我正在学习C ++,并且正在Linux上使用g ++进行练习。
我想知道从事程序员工作的人们是否使用g ++ -pedantic标志及其在现实世界中的重要性。
那其他编译器又如何呢?这是否已成为事实上的标准?
我很感兴趣,因为我正在阅读C ++ Primer,作者指出在数组定义中使用非常量表达式作为维是非法的,并且默认情况下g ++允许这样做。也许还有其他我不知道的事情。
我正在学习C ++,并且正在Linux上使用g ++进行练习。
我想知道从事程序员工作的人们是否使用g ++ -pedantic标志及其在现实世界中的重要性。
那其他编译器又如何呢?这是否已成为事实上的标准?
我很感兴趣,因为我正在阅读C ++ Primer,作者指出在数组定义中使用非常量表达式作为维是非法的,并且默认情况下g ++允许这样做。也许还有其他我不知道的事情。
Answers:
是的,绝对要这样做。事实上,你需要学习手册页面,打开更多的警告不是-pedantic
和-Wall
会做。
不,没有标准。以MSVC /W4
为例。
-Wall -Wextra -Werror -pedantic -std=c++0x
:)
-pedantic
C ++,因为GCC的手册暗示它仅适用于C,并且我已经开始-std=c++14
在新项目中使用。
-Wall -Wextra -Werror -std=c++14
:)
-Werror
将所有警告变为错误。但是-pedantic-errors
只会因Standard ICO C++
违反而导致错误。
我个人使用:
-Wall -Wextra -Wshadow -Weffc ++ -Wstrict-aliasing -ansi -pedantic -Werror
因此可以打开许多警告,但更重要的是将所有警告视为错误(因为大多数警告是您思想中的逻辑错误)。
-Wunreachable-code -Wno-long-long
-g -pg -fprofile-arcs -ftest-coverage
-g -O0
-O3
使用该-pedantic
标志非常重要。
我只想补充一点,在当前标准下,建议使用类似于以下内容的内容:
-std=c++17 -Wall -Wextra -Werror -Wpedantic -pedantic-errors
哪里:
-std=c++17
告诉它遵守2017年发布的C ++标准的修订版,您可以在此处阅读有关它的更多信息。
-Wall
告诉:
启用所有有关某些用户认为可疑的构造的警告,即使与宏结合使用也可以避免(或修改以防止出现该警告),也就是某些警告集合。
-Wextra
告诉它启用更多警告,但还不是全部。
-Werror
告诉它使所有警告变为错误。
-Wpedantic
或只是-pedantic
告诉它:
发出严格的ISO C和ISO C ++要求的所有警告;拒绝所有使用禁止扩展名的程序,以及其他不遵循ISO C和ISO C ++的程序。
-pedantic-errors
告诉它在基本标准(请参阅-Wpedantic)需要诊断时给出错误。
该设置通常不仅对初学者有用,因为他们将逐渐了解每个警告都有可能导致错误,并且也可以正常使用。
在GNU / GCC页面上,将详细描述所有警告选项。