zoukankan      html  css  js  c++  java
  • iOS XCode启用/关闭Clang Warnings

    前言:warnings是编码中很重要的一个环节,编译器给出合理的warning能帮助开发者找到自己代码的问题,防止很多bug产生。 
    默认用XCode创建一个工程,会自动开启一些重要的warnings,但是更多的时候,我们需要编译器更完整的提醒。

    iOS开发采用Clang编译器。


    默认的Warning可以在Build Settings里找到

    在search里搜索Warnings,就可以看到如图,这是为所有语言开启的warnings 

    当然,也可以为不同语言开启warning,也在Build Settings里 

    但是,这样一个个的开启关闭定制化很好,有时候我们只需要开启全部或者开启全部重要的warnings即可 
    这时候,进入 
    这里写图片描述 
    可以添加一些build flag来启用警告,主要的就是三个

    1.-Wall Clang认为自己能够准确报出的警告 
    2. -Wextra额外的苛刻的警告,这些警告不一定会造成错误。例如如果使用这个flag,把singned 赋值给unsigned就会触发警告,而大多数时候这样赋值是没问题的。 
    3.-Weverything 所有警告

    一般的项目都是开启-Wall-Wextra两个警告来保证没有严重错误,当然,如果有些明显的不会出错,可以用关闭某个或者某些警告。

    <code class="hljs lasso has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-attribute" style="box-sizing: border-box;">-Wall</span> <span class="hljs-attribute" style="box-sizing: border-box;">-Wno</span><span class="hljs-attribute" style="box-sizing: border-box;">-unused</span><span class="hljs-attribute" style="box-sizing: border-box;">-variable</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//启用Wall但是剔除unused-variable</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute;  50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right- 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

    用语句强制开启或者关闭某个警告

    强制开启一个警告

    <code class="hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#<span class="hljs-keyword" style="box-sizing: border-box;">warning</span> "This method can not be used"</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute;  50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right- 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

    强制开启一个错误

    <code class="hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#<span class="hljs-keyword" style="box-sizing: border-box;">error</span> "You must add this key,or you will fail"</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute;  50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right- 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

    这里写图片描述

    强制关闭一个警告 
    例如 
    这里会出现警告test这个selector没有实现

    <code class="hljs ruby has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">[<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> <span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">performSelector:</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@selector</span>(test) <span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">withObject:</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">nil</span>];
    </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute;  50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right- 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

    强制关闭这个警告

    <code class="hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#<span class="hljs-keyword" style="box-sizing: border-box;">pragma</span> clang diagnostic push</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#<span class="hljs-keyword" style="box-sizing: border-box;">pragma</span> clang diagnostic ignored "-Wundeclared-selector"</span>
        [self performSelector:@selector(test) withObject:nil];
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#<span class="hljs-keyword" style="box-sizing: border-box;">pragma</span> clang diagnostic pop</span>
    </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute;  50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right- 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>

    常用的CLang Warning

    • Wall
    • Wbad-function-cast
    • Wcast-align
    • Wconversion
    • Wdeclaration-after-statement
    • Wdeprecated-implementations
    • Wextra
    • Wfloat-equal
    • Wformat=2
    • Wformat-nonliteral
    • Wfour-char-constants
    • Wimplicit-atomic-properties
    • Wmissing-braces
    • Wmissing-declarations
    • Wmissing-field-initializers
    • Wmissing-format-attribute
    • Wmissing-noreturn
    • Wmissing-prototypes
    • Wnested-externs
    • Wnewline-eof
    • Wold-style-definition
    • Woverlength-strings
    • Wparentheses
    • Wpointer-arith
    • Wredundant-decls
    • Wreturn-type
    • Wsequence-point
    • Wshadow
    • Wshorten-64-to-32
    • Wsign-compare
    • Wsign-conversion
    • Wstrict-prototypes
    • Wstrict-selector-match
    • Wswitch
    • Wswitch-default
    • Wswitch-enum
    • Wundeclared-selector
    • Wuninitialized
    • Wunknown-pragmas
    • Wunreachable-code
    • Wunused-function
    • Wunused-label
    • Wunused-parameter
    • Wunused-value
    • Wunused-variable
    • Wwrite-strings

    困难模式

    所谓的困难模式就是开启所有警告,并且把警告当作error。这意味着,只要还有一个警告存在,那么程序将不能编译运行。 
    这里写图片描述


    参考链接 
    http://onevcat.com/2013/05/talk-about-warning/ 
    http://programmers.stackexchange.com/questions/122608/clang-warning-flags-for-objective-c-development 
    http://amattn.com/p/better_apps_clang_weverything_or_wall_is_a_lie.html 
    http://nshipster.cn/clang-diagnostics/



    原文地址:http://blog.csdn.net/hello_hwc/article/details/46425503

  • 相关阅读:
    进程二
    高德地图api的使用
    《架构即未来》读后感3
    三周总结
    性能战术:
    二周总结
    《 架构即未来》读后感2
    一周总结
    《架构即未来》读后感
    学生信息系统dao层
  • 原文地址:https://www.cnblogs.com/yjh4866/p/6253951.html
Copyright © 2011-2022 走看看