-o 更改输出文件名(我发现使用--help)
但我不知道
-Wall
有什么作用?
它是“warn all”的缩写——它打开(几乎)g++ 可以告诉您的所有警告。通常这是一个好主意,特别是如果您是初学者,因为理解和修复这些警告可以帮助您解决代码中的许多不同类型的问题。
参见 man gcc。
-Wall 打开这些警告:
-Waddress -Warray-bounds (only with -O2) -Wc++0x-compat -Wchar-subscripts
-Wenum-compare (in C/Objc; this is on by default in C++) -Wimplicit-int (C and
Objective-C only) -Wimplicit-function-declaration (C and Objective-C only)
-Wcomment -Wformat -Wmain (only for C/ObjC and unless -ffreestanding)
-Wmissing-braces -Wnonnull -Wparentheses -Wpointer-sign -Wreorder -Wreturn-type
-Wsequence-point -Wsign-compare (only in C++) -Wstrict-aliasing
-Wstrict-overflow=1 -Wswitch -Wtrigraphs -Wuninitialized -Wunknown-pragmas
-Wunused-function -Wunused-label -Wunused-value -Wunused-variable
-Wvolatile-register-var
-Wextra 包含:
-Wclobbered -Wempty-body -Wignored-qualifiers -Wmissing-field-initializers
-Wmissing-parameter-type (C only) -Wold-style-declaration (C only) -Woverride-init
-Wsign-compare -Wtype-limits -Wuninitialized -Wunused-parameter (only with -Wunused
or -Wall) -Wunused-but-set-parameter (only with -Wunused or -Wall)
还有更多警告您必须明确打开。
例如对于我们的 C 代码,我们使用:
-Wall -Wextra -Waggregate-return -Wcast-align -Wcast-qual -Wdisabled-optimization -Wdiv-by-zero -Wendif-labels -Wformat-extra-args -Wformat-nonliteral -Wformat-security -Wformat-y2k - Wimplicit -Wimport -Winit-self -Winline -Winvalid-pch -Wjump-misses-init -W逻辑操作 -Werror=missing-braces -Wmissing-declarations -Wno-missing-format-attribute -Wmissing-include-dirs -Wmultichar - Wpacked -Wpointer-arith -Wreturn-type -Wsequence-point -Wsign-compare -Wstrict-aliasing -Wstrict-aliasing=2 -Wswitch -Wswitch-default -Werror=undef -Wno-unused -Wvariadic-macros -Wwrite-strings - Wc++-compat -Werror=语句后声明 -Werror=隐式函数声明 -Wmissing-prototypes -Werror=嵌套外部 -Werror=旧式定义 -Werror=严格原型
或者只是一组警告 https://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html, src
遗憾的是,没有一个答案引用手册中实际相关的部分,这确实说明了这一点:
这会启用一些用户考虑的有关结构的所有警告 有问题的,并且很容易避免(或修改以防止警告), 即使与宏结合使用。
[...]
请注意,
并不暗示某些警告标志。其中一些人警告 关于用户通常认为没有问题的结构,但是 有时您可能希望检查一下;其他人则对以下建筑提出警告: 在某些情况下是必要的或难以避免的,并且没有简单的方法可以 修改代码以抑制警告。其中一些是通过-Wall
启用的 但其中许多必须单独启用。-Wextra
因此:
-Wall
not 是否意味着“所有警告”。底线,这是您应该设置的绝对最少警告。虽然
-Wall -Wextra
更好,但它仍然没有利用编译器可以为您完成的所有错误检查。
就我个人而言,我不会低于
-Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual
。我当前的所有项目实际上都使用比这更长的警告列表(不触发任何警告)。我会检查每个主要版本的手册以获取新选项。编译器是你的朋友。使用它可以为您提供的任何诊断。
enables most warning messages
。
如果您使用
g++ --help=warnings
,您可以了解更多信息。
-pedantic
来警告代码中的一些不合格部分。