前言
宏(#define)在C系开发中可以说占有举足轻重的作用。底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏(#define)被大量使用,可以说底层开发离开宏(#define)将寸步难行。
不得不说在C系语言(C、Objective-C、C++等)中宏(#define)真是个非常方便又强大的东西。
宏(#define)在基本的语法上是非常的简单的,但完全不会影响它的强大。
不过有时候正因为宏(#define)的简单、方便和强大,就会导致我们平常在使用的时候,其中会有很多的注意点和细节需要我们去注意,如果不小心将其忽略, 那么可能会带来我们意料之外的不想要的结果。
如果我们要想灵活的使用宏(#define),那么深入了解宏(#define)工作原理和用法必不可少。
而且经常在iOS开发中使用Objective-C, 那么肯定会经常使用到宏(#define)。
预编译
程序会在预编译之前还会有一些操作, 比如:删除反斜线+换行符的组合, 将各种形式的注释用空格替代等等。
接着是预编译阶段,预编译在处理#define的时候,会从#开始一直执行到遇到的第一个换行符(写代码的时候换行
的作用)为止。
所以可知#define只会允许定义一行的宏,但是因为预编译之前会删除反斜线+换行符的组合,所以我们可以利用反斜线+换行符来定义多行宏,
在将删除反斜线和换行符的组合后,在预编译阶段的逻辑上#define定义就成了一行的宏了。
#define在预处理阶段只进行文本的替换(相当于把代码拷贝粘贴),不会进行具体的计算。
#define作用在预编译时期,其真正的效果就是