iOS代码运行的磨刀石-预编译指令

iOS中代码运行的磨刀石--预编译指令

所谓预编译,就是程序代码在编译以前,开发工具为咱们预先作的一些工做。不要小瞧这些指令,没有它们,咱们的代码可能步履维艰。函数

1、文件包含相关预处理命令

 

#include <header>工具

#include "header"开发工具

C语言中使用的包含文件的指令""和<>的区别为,""是从当前目录开始寻找文件,<>是从系统库中寻找文件。这两个指令不能使头文件循环引入,也不能重复包含同一个头文件。spa

 

 

#import "header"开发

#import <header>编译器

这两个指令和上面两个做用同样,只是更加智能,智能处理重复包含头文件的问题。博客

 

 

#include_next "header"编译

#include_next <header>效率

这两个指令是C中的指令,OC也支持,只是不多使用,它的做用是在找到名字匹配的头文件后跳过,寻找下一个相同名字的导入。import

 

2、宏定义

宏定义是开发中会常常用到的一个指令了,咱们还会将许多简单的函数定义为宏,省去系统压栈的时间,提升代码效率。由于这篇博客的主题是预处理命令,因此宏的用法和高级用法就再也不多写了,下次再讨论。

 

#define 参数1 参数2

定义一个简单的替换宏,不带参数,在预编译阶段,会把全部参数1的地方直接替换为参数2。 

 

#define ADD(x) (x+x)

定义一个带参数的宏,相似带参函数的功能,但也是编译前作简单替换。

 

3、条件编译

条件编译用于判断一个表达式是否成立,成立则进入条件编译。

方式一:

#if 表达式

#else 

#endif 

方式二:

#if 表达式

#elif 表达式

#endif

方式三:

 

#ifndef 

若是没有定义一个宏进行编译

#ifdef

若是定义一个宏进行编译
 

4、错误,警告的预处理

 

#error 错误

当程序检查到这里时会中止编译,这个命令的做用是在错误的地方禁止编译。

 

#warning 警告

这个命令并不会影响程序的编译和运行,可是会认为的在这里显示一条警告信息,提醒咱们本身。

 

5、更改文件名和行号

在OC中,有一个系统的定义的宏:

__LINE__

这个宏表示当前行的行号,能够打印。

 

#line number

改变当前行的行号,会影响下面全部的行

 

 

#line number "filename"

改变当前行号和编译后的文件名

 

6、编译器控制指令

#pragma 参数

这个预编译指令是最复杂的,用于控制编译器的行为,通常咱们开发应用APP是不多用到的,经常使用的有两种方式:

 

#pragma mark - 信息

为代码加上标注

 

#pragma message("信息")

编译时提示信息

 

专一技术,热爱生活,交流技术,也作朋友。

——珲少 QQ群:203317592

相关文章
相关标签/搜索