-o更改输出文件名(我发现使用--help)
但是我不知道-Wall
是什么?
-o更改输出文件名(我发现使用--help)
但是我不知道-Wall
是什么?
man
如果您想知道某个开关的作用或可用的开关,请尝试阅读程序的条目。的man
页面gcc
可以在linux.die.net/man/1/gcc上阅读-您可以在那里快速搜索文本“ -Wall”
Answers:
这是“警告所有”的简称-它(几乎)打开g ++可以告诉您的所有警告。通常,这是一个好主意,特别是如果您是初学者,因为理解和修复这些警告可以帮助您解决代码中的许多不同类型的问题。
-Wextra
和打开更多警告(其中一些非常有用)-pedantic
。
-Wall -Wextra
,然后仔细阅读手册,以找到尽可能多的更多的警告,你可以启用越好,因为即使-Wextra
是只有一小部分...
-Wunreachable-code
一段时间之前禁用它,那么这些天苹果会更快乐。;-)
参见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返回-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 -Wologic-op -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 = nested-externs -Werror = old-style-definition -Werror = strict-prototypes
或仅使用https://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html发出的警告集
可悲的是,没有任何答案引用了手册的实际相关部分,这确实使它指向了重点:
这将启用所有有关某些用户认为可疑的构造的警告,即使与宏结合使用,也很容易避免(或进行修改以防止出现警告)。
[...]
请注意,并未暗示某些警告标志
-Wall
。他们中的一些人警告用户通常认为不会有问题的结构,但有时您可能希望检查一下。其他人警告在某些情况下必须避免的结构,没有简单的方法来修改代码以抑制警告。其中一些已启用,-Wextra
但其中许多必须单独启用。
Ergo:
-Wall
也不会意味着“所有警告”。底线是您应设置的警告的绝对最小值。虽然-Wall -Wextra
较好,但仍然没有利用错误检查你的编译器可以为你做的一切。
就个人而言,我的付出不会低于-Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual
。我当前所有的项目实际上使用的警告列表都比警告列表长(没有触发任何警告)。而且,我确实会在每个主要版本中查看手册,以了解新选项。编译器是您的朋友。使用它可以为您提供的任何诊断信息。
-Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual
编译g++ -std=c++11
器?还是应该跳过这一部分,稍后再开始使用错误消息标志?如果是这样,什么时候应该从错误消息开始?
它可以使警告被gcc编写者视为有用且易于避免。还有-W(在较新版本中为-Wextra),它被认为有用,但要解决该问题,误报可能会很困难或导致代码笨拙。
gcc还有很多其他警告,通常不太有用。参见http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Warning-Options.html#Warning-Options
它启用所有警告。(读为“警告所有”)
-Wall
只是表示“大多数警告”,而不是“所有警告”。
它显示所有警告。我还建议您使用-pedantic
来警告某些不符合标准的代码部分。