Clang Diagnostics
来源:互联网 发布:万华写频软件 编辑:程序博客网 时间:2024/06/05 15:58
诊断结合了逻辑与分析来得出一个结论。这是最纯粹的科学和工程学,也是人类最有力的推理。
在医学界,诊断是通过实验室样本做后盾的本能来判断。而对于工业制造,则是通过在统计和方向都等同应用来诊断产品故障。
对于我们开发者来说,我们通过代码通知后续代码的生产,创建了一个在过去半个世纪里呈几何级数发展的技术的正反馈循环。尤其对于我们的 Objective-C 开发者来说,最有效的诊断来自 Clang。
Clang 是 C / Objective-C 的前端的 LLVM 编译器。它对 Objective-C 的语义和语法有着深刻的理解,而且更重要的原因是现在 Objective-C 已经是这样一个有能力的语言了。
当你在 XCode 中运行 "Build & Analyze" (⌘⇧B
) 后得到的惊人结果是 Clang 的更细腻,更深沉一面的功能:它的代码诊断。
在我们关于 #pragma
文章中,我们打趣的说:
资深提示:尝试设置
-Weverything
标志,并在你的编译设置中勾选上 "Treat Warnings as Errors"。这将在 Xcode 中开启困难模式。
现在,我们支持这个建议,并鼓励其他开发者更严肃的对待编译警告。然而,也有一些情况下,你和 Clang 会陷入僵局。例如,考虑以下 switch
语句:
switch (style) { case UITableViewCellStyleDefault: case UITableViewCellStyleValue1: case UITableViewCellStyleValue2: case UITableViewCellStyleSubtitle: // ... default: return;}
当启用这些标志后,Clang 会警告说 "default label in switch which covers all enumeration values"。然而,放大到一个更大的背景下,如果我们 知道 style
是(不管怎样)从外部来源的描述(如JSON资源),允许无约束的 NSInteger
值,则 default
情况是必要的保障。坚持这个必然性的唯一方法就是使用 #pragma
暂时忽略警告标志:
push
&pop
用于保存和恢复编译器的状态,类似 Core Graphics 或 OpenGL 上下文。
#pragma clang diagnostic push#pragma clang diagnostic ignored "-Wcovered-switch-default"switch (style) { case UITableViewCellStyleDefault: case UITableViewCellStyleValue1: case UITableViewCellStyleValue2: case UITableViewCellStyleSubtitle: // ... default: return;}#pragma clang diagnostic pop
而且,怎么强调都不为过,Clang 至少在 99% 的情况下都是对的。事实上修正一个分析警告 最好的 办法就是忽略它。使用
#pragma clang diagnostic ignored
作为最后的方法。
本周,作为公共服务,我们已经编制了一份(基本上)全面的 Clang 警告综合列表,可以在这里找到:
F***ingClangWarnings.com
你可以在 Xcode Issue Navigator 里选择 "Reveal in Log" 并 ^
-点击 相应的条目,这样你还可以找到你可能会遇到的任何编译器和分析器的警告。(如果这个选项被禁用,请尝试重新构建项目)
- Clang Diagnostics
- -diagnostics
- clang
- Clang
- clang
- clang
- clang
- rabbitMq:DIAGNOSTICS
- BSOD Diagnostics
- System.Diagnostics.Debug和System.Diagnostics.Trace
- System.Diagnostics.Debug和System.Diagnostics.Trace
- System.Diagnostics.Debug和System.Diagnostics.Trace
- System.Diagnostics.Debug和System.Diagnostics.Trace
- System.Diagnostics.Process
- System.Diagnostics.Process
- Diagnostics.Trace 保存txt
- Windows Azure Diagnostics Note
- System.Diagnostics.Process.Start
- 二维码打印机的例子
- HDU2896-AC自动机
- POJ3641 UVA11287 HDU1905 Pseudoprime numbers【素数判定+快速模幂】
- 排序算法——快速排序
- 成为Java顶尖程序员 ,看这10本书就够了
- Clang Diagnostics
- 嵌套的DIV水平垂直居中
- 机器学习 核函数
- PAT-A-1020. Tree Traversals (25)
- NYOJ-82迷宫寻宝(门与钥匙经典+搜索)
- Kubernetes中pod创建流程
- Hibernate hbm2ddl
- server2008 加载驱动隐藏文件或文件夹方法,可在webshell下提权后使用,付切实可行办法
- vue-study-1 mvx模式