美文网首页
编译开发warning消除,及error处理

编译开发warning消除,及error处理

作者: Nothing_655f | 来源:发表于2020-08-27 19:47 被阅读0次

    warning 处理

    需将变量声明放到开头

    警告信息:

    warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
    
    

    变量定义之前任何一条非变量定义的语句(注意:语句是会带分号的)都会引起这个警告!
    解决方法:
    将非变量的定义移到变量定义之后 即可
    在内核中还需要将 printk的打印放在变量定义之后

    添加c++11的支持

    警告信息:

    warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11
    
    

    在Android.mk中添加:

    LOCAL_CPPFLAGS += -std=c++11
    
    

    取消对未使用参数的编译警告

    警告信息:

    warning: unused parameter 'msgId' [-Wunused-parameter]
    
    

    在Android.mk中添加:

    LOCAL_CFLAGS +=  -Wno-unused-parameter
    
    

    有符号类型和无符号类型比较警告

    这种警告还是手动检查一下,避免引入bug。
    警告信息:

    warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    
    

    在Android.mk中添加:

    LOCAL_CFLAGS +=  -Wno-sign-compare
    
    

    总结: 警告信息中会说明编译选项,例如:[-Wsign-compare],添加no- 即为取消警告的编译选项,即:-Wno-sign-compare

    Error 处理

    error: invalid storage class for function
    
    

    程序编译的时候出现这个错误,按照所提示的语句找到出错的函数发现没有错误,其实导致这个错误的函数在这个函数的前面,原因是报错的函数的前面的那一个函数{}不配对。

    转自 编译开发warning消除,及error处理

    gcc, g++编译时消除特定警告的方法

    在编译调试代码的时候,编译警告可以为我们定位到程序中的很多异常问题。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 
    

    -W

    -Wextra

    打印一些额外的警告信息。

    -w

    禁止显示所有警告信息。

    -Wshadow

    当一个局部变量遮盖住了另一个局部变量,或者全局变量时,给出警告。很有用的选项,建议打开。 -Wall 并不会打开此项。

    -Wpointer-arith

    对函数指针或者void *类型的指针进行算术操作时给出警告。也很有用。 -Wall 并不会打开此项。

    -Wcast-qual

    当强制转化丢掉了类型修饰符时给出警告。 -Wall 并不会打开此项。

    -Waggregate-return

    如果定义或调用了返回结构体或联合体的函数,编译器就发出警告。

    -Winline

    无论是声明为 inline 或者是指定了-finline-functions 选项,如果某函数不能内联,编译器都将发出警告。如果你的代码含有很多 inline 函数的话,这是很有用的选项。

    -Werror

    把警告当作错误。出现任何警告就放弃编译。

    -Wunreachable-code

    如果编译器探测到永远不会执行到的代码,就给出警告。也是比较有用的选项。

    -Wcast-align

    一旦某个指针类型强制转换导致目标所需的地址对齐增加时,编译器就发出警告。

    -Wundef

    当一个没有定义的符号出现在 #if 中时,给出警告。

    -Wredundant-decls

    如果在同一个可见域内某定义多次声明,编译器就发出警告,即使这些重复声明有效并且毫无差别。

    =========================================================================

    但如果编译警告提示等级太低,有时候就会出现很多并不影响程序运行的警告信息,比如:-Wunused-but-set-variable 警告,它表示一个变量定义了,但是该变量没有被实际应用到。太多的警告容易在编译的时候出现“刷屏”,在gcc 和g++ 中也可以屏蔽某一种编译警告,在警告前面添加-Wno就可以了。假如我们需要屏蔽-Wunused-but-set-variable 这一类警告,可以这样添加编译选项:

        -Wno-unused-but-set-variable
    

    转自 gcc, g++编译时消除特定警告的方法

    相关文章

      网友评论

          本文标题:编译开发warning消除,及error处理

          本文链接:https://www.haomeiwen.com/subject/cnjhsktx.html