GCC编译时的警告(warn)相关参数
编译阶段警告信息有助于排查代码中错误,合理配置编译警告信息能够提高开发效率。
通过了解编译警告,也能够了解到哪些代码风格是不好的,有哪些代码的书写格式是容易出现问题的,有助于让自己写出更高质量的代码。
-fsyntax-only
检查代码中的语法错误,但是不做任何处理,通常用作语法检查。
在使用这个参数以后,编译器仅仅检查代码中的语法错误并予以提示,并不会生成目标文件。
-w
禁止所有的报警信息
-Werror
将所有的警告视为错误
-Wfatal-errors
在出现第一条错误信息停止编译
-Wall
启用以下警告
-Waddress -Warray-bounds=1 (only with -O2) -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 -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-braces (only for C/ObjC) -Wmultistatement-macros -Wnarrowing (only for C++) -Wnonnull -Wnonnull-compare -Wopenmp-simd -Wparentheses -Wpointer-sign -Wreorder -Wrestrict -Wreturn-type -Wsequence-point -Wsign-compare (only in C++) -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 -Wvolatile-register-var
-Wextra
启用以下警告
-Wclobbered -Wcast-function-type -Wempty-body -Wignored-qualifiers -Wimplicit-fallthrough=3 -Wmissing-field-initializers -Wmissing-parameter-type (C only) -Wold-style-declaration (C only) -Woverride-init -Wsign-compare (C only) -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)
-Wdelete-incomplete
(C++ and Objective-C++ only)
析构一个指向不完整的类型的指针,可能会造成运行时错误未定义行为。
这个警告默认是开启的。
-Wuseless-cast
(C++ and Objective-C++ only)
变量被转换为自身类型。
-Wduplicated-branches
用于检查在 if/else
语句中是否存在返回值相同的结果返回值。
-Wduplicated-cond
用于检查在 if/else
语句中存在相同的条件
-Wfloat-equal
检查使用等号比较float相等的情况
-Wformat
检查printf相关函数中的格式字符串是否符合与后续的实际参数对应。
该项检查在 -Wall
中默认开启,可以通过 -Wformat=0
进行关闭。
配置范例
这里是正在使用的警告相关的参数配置
#编译时的警告信息
WARNING_FLAG = -Wall -Wextra -Wfatal-errors -Wpedantic \
-Wswitch-default -Wundef -Wpointer-arith \
-Woverloaded-virtual -Wnon-virtual-dtor \
-Wno-unused-parameter \
-Wuseless-cast -Wformat-security -Wformat-nonliteral \
-Wduplicated-branches -Wduplicated-cond -Wfloat-equal