天天看点

OC 预编译指令

宏定义 条件编译 文件包含

宏定义:

定义格式: #define 标识符 字符串

1、 不含参数: #define TAG_VIEW 10086

2、 含有参数:#define MAX_INT(a,b) a+b

3、 宏定义不是C语句,不必在行末加分号。如果加了分号则会连分号一起进行置换。

4、 #define 命令出现在程序中函数的外面,宏名的有效范围为定义命令之后到本文件结束。通常,#define 命令写在文件开头,函数之前,作为文件一部分,在此文件范围内有效。

5、 可以用#undef 命令终止宏定义的作用域。

6、对程序中用双撇号括起来的字符串内的字符,即使与宏名相同,也不进行置换。NSLog(@“MAX_INT = %d”, 10086)

7、宏定义是专门用于预处理命令的一个专用名词,它与定义变量的含义不同,只作字符替换,不分配内存空间。

条件编译:

条件编译就是在编译之前预处理器根据预处理指令判断对应的条件,如果条件满足就将对应的代码编译进去,否则代码就根本不进入编译环节(相当于根本就没有这段代码)。

常用条件编译函数

1、#if 编译预处理中的条件命令, 相当于C语法中的if语句

2、#ifdef 判断某个宏是否被定义, 若已定义, 执行随后的语句

3、#ifndef 与#ifdef相反, 判断某个宏是否未被定义

4、#elif 若#if, #ifdef, #ifndef或前面的#elif条件不满足, 则执行#elif之后的语句, 相当于C语法中的else-if

6、#else 与#if, #ifdef, #ifndef对应, 若这些条件不满足, 则执行#else之后的语句, 相当于C语法中的else

7、#endif #if, #ifdef, #ifndef这些条件命令的结束标志.

8、#if 与 #ifdef 的区别:#if是判断后面的条件语句是否成立,#ifdef是判断某个宏是否被定义过。要区分开!

另外,在创建一个头文件或pch文件 — 单独的一个.h文件时,常看到文件内自带了下述格式内容