C ++:GNU G ++参数是什么?

时间:2011-01-11 19:07:03

标签: c++ gcc g++ warnings

  

可能重复:
  Best compiler warning level for C/C++ compilers?

海湾合作委员会有数以千计的选择来增加警告;我希望-Wall -Wextra -pedantic包含所有有用的内容,但刚才我遇到-Woverloaded-virtual这对我来说真的很好。

您使用或推荐哪些其他G ++参数?

5 个答案:

答案 0 :(得分:2)

不完全相同的类别,但我总是使用-Werror进行编译,将警告标记为错误。非常有用。

要使用第三方标题,我可以通过-isystem而不是-I添加这些标题...否则这些标题中的警告会破坏构建。

还有-Weffc++警告Meyers的 Effective C ++ 中列出的具体问题。但是,我发现这太苛刻了。例如,它会警告没有声明虚拟析构函数的基类。从理论上讲,这非常好,但我正在开发一个模板库,它使用继承代码重用(和策略类),显然它们没有(也不需要)虚拟析构函数。

答案 1 :(得分:2)

Best compiler warning level for C/C++ compilers?。一个帖子包含以下详尽(和令人筋疲力尽)的列表。

   -g -O -Wall -Weffc++ -pedantic  \
    -pedantic-errors -Wextra  -Wall -Waggregate-return -Wcast-align \
    -Wcast-qual  -Wchar-subscripts  -Wcomment -Wconversion \
    -Wdisabled-optimization \
    -Werror -Wfloat-equal  -Wformat  -Wformat=2 \
    -Wformat-nonliteral -Wformat-security  \
    -Wformat-y2k \
    -Wimplicit  -Wimport  -Winit-self  -Winline \
    -Winvalid-pch   \
    -Wunsafe-loop-optimizations  -Wlong-long -Wmissing-braces \
    -Wmissing-field-initializers -Wmissing-format-attribute   \
    -Wmissing-include-dirs -Wmissing-noreturn \
    -Wpacked  -Wpadded -Wparentheses  -Wpointer-arith \
    -Wredundant-decls -Wreturn-type \
    -Wsequence-point  -Wshadow -Wsign-compare  -Wstack-protector \
    -Wstrict-aliasing -Wstrict-aliasing=2 -Wswitch  -Wswitch-default \
    -Wswitch-enum -Wtrigraphs  -Wuninitialized \
    -Wunknown-pragmas  -Wunreachable-code -Wunused \
    -Wunused-function  -Wunused-label  -Wunused-parameter \
    -Wunused-value  -Wunused-variable  -Wvariadic-macros \
    -Wvolatile-register-var  -Wwrite-strings

答案 2 :(得分:1)

我见过的一些用过的东西;

  

-Wcast-qual:每当指针被转换时发出警告,以便从目标类型中删除类型限定符。例如,警告const char *是否投射到普通char *

     

-Wpointer-arith:警告任何取决于函数类型或void大小的内容。 GNU C将这些类型的大小分配为1,以便于使用void *指针和指向函数的指针进行计算。

     

-Wwrite-strings:编译C时,给字符串常量类型const char[length],这样将一个地址复制到非const char *指针就会收到警告;在编译C ++时,警告有关从字符串文字到char *的已弃用转换。默认情况下,此警告已为C ++程序启用。这些警告将帮助您在编译时找到可以尝试写入字符串常量的代码,但前提是您在声明和原型中使用const时非常小心。否则,这只会​​令人讨厌;这就是为什么我们没有让-Wall请求这些警告。

     

-Wdisabled-optimization:如果请求的优化通道被禁用,则发出警告。此警告通常不表示您的代码有任何问题;它只是表明GCC的优化器无法有效地处理代码。通常,问题是您的代码太大或太复杂;当优化本身可能需要花费大量时间时,海湾合作委员会将拒绝优化计划。

答案 3 :(得分:1)

一般情况下,我启用所有警告,然后有选择地删除那些提供无用输出的标志。在我的一个项目中,我使用以下C和C ++警告:

-pedantic
-Wall
-Wextra
-Wformat=2
-Wmissing-include-dirs
-Wswitch-default
-Wswitch-enum
-Wunused
-Wstrict-aliasing=1
-Wfloat-equal
-Wundef
-Wunsafe-loop-optimizations
-Wpointer-arith
-Wcast-qual
-Wcast-align
-Wwrite-strings
-Wconversion
-Wmissing-format-attribute
-Wpacked
-Wredundant-decls
-Winvalid-pch
-Wvolatile-register-var
-Wsync-nand
-Wsign-conversion
-Wlogical-op
-Wmissing-declarations
-Wmissing-noreturn
-Wstrict-overflow=5
-Wstack-protector

此外,我使用以下C ++标志:

-std=c++98
-Wnon-virtual-dtor
-Wctor-dtor-privacy
-Wstrict-null-sentinel
-Woverloaded-virtual
-Wsign-promo

此外,对于发布版本,我启用以下警告:

-pedantic-errors
-Werror
-Wuninitialized
-Winit-self
-Wdisabled-optimization

我发现-Wall只启用绝对最少的警告而不是“全部”,这一点非常令人讨厌,顾名思义。

答案 4 :(得分:1)

除了上面提到的那些:

-pedantic                   Issue warnings needed for strict compliance to the standard
-Wall
-Wextra                     Print extra (possibly unwanted) warnings
-Werror                     Treat all warnings as errors
-std=c++0x                  Conform to the ISO 1998 C++ standard, with extensions that are likely to be in C++0x 
-std=c++98                  Conform to the ISO 1998 C++ standard