关于-#pragma

在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C ++语言完全兼容的情况下,给出主机或操作系统专有的特征。由于太复杂,在OC中主要在以下几个方面使用到:


用途一:用于标识代码

它们告诉Xcode编译器,要在编辑器窗格顶部的方法和函数弹出菜单中将代码分隔开,如下图所示:


pragma

一些类(尤其是一些控制器类)可能很长,方法和函数弹出菜单可以便于代码导航。此时加入#pragma 指令对代码进行逻辑组织很有效果。

值得注意的地方
**#pragma mark – 的“-”后面不能有空格。
如果你的标志没有出现在弹出菜单中,比如没有分隔线出现,请在Xcode菜单 “Preferences..”中的 “Code Sense”选项取消选中”Sort list alphabetically”即可。

用途二:用对OC警告的处理

最全忽略警告的代码

 一个忽略整数警号的例子:
//#pragma clang diagnostic push
//#pragma clang diagnostic ignored "-Wunused-variable"
  int a;
//#pragma clang diagnostic pop

warnings是编码中很重要的一个环节,编译器给出合理的warning能帮助开发者找到自己代码的问题,防止很多bug产生。 默认用XCode创建一个工程,会自动开启一些重要的warnings,但是更多的时候,我们需要编译器更完整的提醒。
iOS开发采用Clang编译器。LLVM是一个开源的编译器架构,Clang是LLVM的一个编译器前端。
更多关于 Clang 和 LLVM请点击: iOS——LLVM、Clang浅析

想了解更多关于#pragma请移步到以下文章:

#pragma预处理命令
谈谈Objective-C的警告

推荐阅读更多精彩内容

  • 前言 2000年,伊利诺伊大学厄巴纳-香槟分校(University of Illinois at Urbana-...
    星光社的戴铭阅读 14,329评论 8 177
  • 编译器做些什么? 本文主要探讨一下编译器主要做些什么,以及如何有效的利用编译器。 简单的说,编译器有两个职责:把 ...
    评评分分阅读 778评论 1 5
  • 前言 通过阅读别人的优秀源码,你会发现别人的开源API设计中,有一些宏你是经常忽略的,或者你不知道的。通过这些宏,...
    gitKong阅读 4,413评论 5 38
  • 【每日一谈心】:QQ,谈心时间到咯 QQ说:妈妈谈什么心呀?今天我在幼儿园很乖的,爸爸去做爸爸的事情妈妈去做妈妈的...
    674e09b5464a阅读 48评论 0 0
  • 有人说:“过去在记忆中灰飞烟灭,重要的是眼前,但更重要的是生活以及生存!” 如果,你一直活在过去的世界里,...
    冬一缕阳光阅读 2,326评论 2 3