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

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

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

所谓预编译,就是程序代码在编译之前,开发工具为我们预先做的一些工作。不要小瞧这些指令,没有它们,我们的代码可能寸步难行。

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

 

#include <header>

#include "header"

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

 

 

#import "header"

#import <header>

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

 

 

#include_next "header"

#include_next <header>

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

 

二、宏定义

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

 

#define 参数1 参数2

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

 

#define ADD(x) (x+x)

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

 

三、条件编译

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

方式一:

#if 表达式

#else

#endif

方式二:

#if 表达式

#elif 表达式

#endif

方式三:

 

#ifndef

如果没有定义一个宏进行编译

#ifdef

如果定义一个宏进行编译

 

四、错误,警告的预处理

 

#error 错误

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

 

#warning 警告

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

 

五、更改文件名和行号

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

__LINE__

这个宏表示当前行的行号,可以打印。

 

#line number

改变当前行的行号,会影响下面所有的行

 

 

#line number "filename"

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

 

六、编译器控制指令

#pragma 参数

这个预编译指令是最复杂的,用于控制编译器的行为,一般我们开发应用APP是很少用到的,常用的有两种方式:

 

#pragma mark - 信息

为代码加上标注

 

#pragma message("信息")

编译时提示信息

目录
相关文章
|
7月前
|
移动开发 安全 数据安全/隐私保护
iOS 全局自动化代码混淆工具!支持 cocoapod 组件代码一并混淆
iOS 全局自动化代码混淆工具!支持 cocoapod 组件代码一并混淆
|
7月前
|
移动开发 前端开发 安全
最强大的 iOS 应用源码保护工具:Ipa Guard,保护你的商业机密代码
最强大的 iOS 应用源码保护工具:Ipa Guard,保护你的商业机密代码
|
4月前
|
iOS开发 MacOS Perl
解决Xcode运行IOS报错:redefinition of module ‘Firebase‘和could not build module ‘CoreFoundation‘
解决Xcode运行IOS报错:redefinition of module ‘Firebase‘和could not build module ‘CoreFoundation‘
164 4
|
2月前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异:从代码到用户体验
【10月更文挑战第5天】在移动应用开发的广阔天地中,安卓和iOS两大平台各占半壁江山。它们在技术架构、开发环境及用户体验上有着根本的不同。本文通过比较这两种平台的开发过程,揭示背后的设计理念和技术选择如何影响最终产品。我们将深入探讨各自平台的代码示例,理解开发者面临的挑战,以及这些差异如何塑造用户的日常体验。
|
4月前
|
开发工具 iOS开发
解决Flutter运行报错Could not run build/ios/iphoneos/Runner.app
解决Flutter运行报错Could not run build/ios/iphoneos/Runner.app
183 2
|
4月前
|
iOS开发
解决Flutter运行IOS报错:Podfile is out of date
解决Flutter运行IOS报错:Podfile is out of date
80 1
|
4月前
|
Android开发 iOS开发
[ionic]解决运行Android、IOS出现Could not find the web assets directory
[ionic]解决运行Android、IOS出现Could not find the web assets directory
39 1
|
7月前
|
缓存 开发工具 iOS开发
优化iOS中Objective-C代码调起支付流程的速度
优化iOS中Objective-C代码调起支付流程的速度
120 2
|
7月前
|
移动开发 安全 数据安全/隐私保护
iOS 代码混淆和加固技术详解
iOS 代码混淆和加固技术详解
|
7月前
|
移动开发 前端开发 数据安全/隐私保护
iOS 代码混淆 - 从入门到放弃
iOS 代码混淆 - 从入门到放弃