victor
发布于

GCC compile option

gcc 提供了大量的警告选项,对代码中可能存在的问题提出警告,通常可以使用-Wall 来开启以下警告:
-Waddress -Warray-bounds (only with -O2) -Wc++0x-compat
-Wchar-subscripts -Wimplicit-int -Wimplicit-function-declaration
-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 (only with -O1 and above)
-Wunknown-pragmas -Wunused-function -Wunused-label -Wunused-value
-Wunused-variable
unused-function:警告声明但是没有定义的 static 函数;
unused- label:声明但是未使用的标签;
unused-parameter:警告未使用的函数参数;
unused-variable:声明但是未使用的本地变量;
unused-value:计算了但是未使用的值;
format:printf 和 scanf 这样的函数中的格式字符串的使用不当;
implicit-int:未指定类型;
implicit-function:函数在声明前使用;
char- subscripts:使用 char 类作为数组下标(因为 char 可能是有符号数);
missingbraces:大括号不匹配;
parentheses: 圆括号不匹配;
return-type:函数有无返回值以及返回值类型不匹配;
sequence-point:违反顺序点的代码,比如 a[i] = c[i++];
switch:switch 语句缺少 default 或者 switch 使用枚举变量为索引时缺少某个变量的 case;
strict- aliasing=n:使用 n 设置对指针变量指向的对象类型产生警告的限制程度,默认 n=3;只有在-fstrict-aliasing 设置的情况下有效;
unknow-pragmas:使用未知的#pragma 指令;
uninitialized:使用的变量为初始化,只在-O2 时有效;


对于需要 GCC 关闭某类警告错误,即在警告错误名前加 no-,如
ideviceinstaller.c:910:20: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]

export CFLAGS =-Wno-sign-compare

浏览 (635) 点赞 收藏 分享
评论