gcc option

六月 15, 2022

gcc option

常用编译参数:

-Werror 所有警告变成error -Werror= 所以指定的警告变成error,比如-Werror=switch 意味着受 -Wswitch控制的警告变成error -Wfatal-errors 这个选项使得编译器在遇到第一个error后就终止编译 通过‘-W’开头,能指定开启许多警告,与之对应通过‘-Wno-’也能关闭指定的警告

-pedantic 列出违背严格的c/c++标准的所有警告 -pedantic-errors 列出违背严格的c/c++标准的所有错误 -Wall 列出下列警告 -Waddress -Warray-bounds=1 (only with -O2) -Warray-parameter=2 (C and Objective-C only) -Wbool-compare -Wbool-operation -Wc++11-compat -Wc++14-compat -Wcatch-value (C++ and Objective-C++ only) -Wchar-subscripts -Wcomment -Wduplicate-decl-specifier (C and Objective-C only) -Wenum-compare (in C/ObjC; this is on by default in C++) -Wformat -Wformat-overflow -Wformat-truncation -Wint-in-bool-context -Wimplicit (C and Objective-C only) -Wimplicit-int (C and Objective-C only) -Wimplicit-function-declaration (C and Objective-C only) -Winit-self (only for C++) -Wlogical-not-parentheses -Wmain (only for C/ObjC and unless -ffreestanding) -Wmaybe-uninitialized -Wmemset-elt-size -Wmemset-transposed-args -Wmisleading-indentation (only for C/C++) -Wmissing-attributes -Wmissing-braces (only for C/ObjC) -Wmultistatement-macros -Wnarrowing (only for C++) -Wnonnull -Wnonnull-compare -Wopenmp-simd -Wparentheses -Wpessimizing-move (only for C++) -Wpointer-sign -Wrange-loop-construct (only for C++) -Wreorder -Wrestrict -Wreturn-type -Wsequence-point -Wsign-compare (only in C++) -Wsizeof-array-div -Wsizeof-pointer-div -Wsizeof-pointer-memaccess -Wstrict-aliasing -Wstrict-overflow=1 -Wswitch -Wtautological-compare -Wtrigraphs -Wuninitialized -Wunknown-pragmas -Wunused-function -Wunused-label -Wunused-value -Wunused-variable -Wvla-parameter (C and Objective-C only) -Wvolatile-register-var -Wzero-length-bounds

列出没被-Wall列出的些警告

-Wextra 列出没被-Wall列出的些警告 -Wclobbered -Wcast-function-type -Wdeprecated-copy (C++ only) -Wempty-body -Wenum-conversion (C only) -Wignored-qualifiers -Wimplicit-fallthrough=3 -Wmissing-field-initializers -Wmissing-parameter-type (C only) -Wold-style-declaration (C only) -Woverride-init -Wsign-compare (C only) -Wstring-compare -Wredundant-move (only for C++) -Wtype-limits -Wuninitialized -Wshift-negative-value (in C++03 and in C99 and newer) -Wunused-parameter (only with -Wunused or -Wall) -Wunused-but-set-parameter (only with -Wunused or -Wall)

-Wnon-virtual-dtor 当类用于多态时,即基类被继承时,析构函数非虚时会发出警告 -Wold-style-cast 当使用c语言式的类型转换将发出警告 -Woverloaded-virtual 当子类重载了基类虚函数时,会发出警告,因为此时基类定义的虚函数被子类隐藏了。 -Wswitch-default 当switch语句没有default分支时,发出警告 -Wshadow 当一个变量掩盖了另一个变量时给出警告 -Wcast-qual 当类型转换丢失限定信息时给出警告 -Wextra-semi 当类函数定义后出现多余的分号给出警告

推荐常用编译参数组合

-Wall -Wextra -Wnon-virtual-dtor -Wold-style-cast -Woverloaded-virtual -Wsign-promo -Wswitch-default -Wfloat-equal -Wshadow -Wcast-qual -Wextra-semi**