简介

OC程序执行过程,在源代码编译成0跟1的二进制文件之前。执行的指令称之为预处理指令。

所有的预处理指令都是以#开头。#import也是预处理指令。预处理指令主要分为三种

预处理指令是有的作用域的:从编写指令的那一行开始,一直到文件的结尾。

宏定义

宏定义分为

不带参数

预处理指令#define,不带参数的宏定义可以用来定义一个常量。

#import <Foundation/Foundation.h>
#define COUNT 6
int main(int argc, const char * argv[]) { for (int i=0; i<COUNT; i++) {
NSLog(@"----------------");
}
return 0;
}

宏名一般用大写或者以k开头,变量名一般用小写

带参数

带参数的宏可以用来定义一些简单的固定的代码。

#import <Foundation/Foundation.h>
#define SUM(num1, num2) ((num1)+(num2))
int main(int argc, const char * argv[]) { int ret = SUM(2, 3); return 0;
}

注意宏定义只是替换代码,在带有参数的宏定义为了严谨应该在参数加上括号。

条件编译

在很多情况下,我们希望程序中的一部分代码只在满足一定条件下才进行编译,否则不参与编译,这就是条件编译

基本用法

#if 条件1
...coder1...
#elif 条件2
...coder2...
#else
...coder3...
#endif

其他用法

  • 如果通过判断是否定义了某个宏来来决定是否参与编译;
#if defined(宏)
...code...
#endif

条件取反的写法:如果前面没有定义指定的宏,就将代码编译进去。

#if !defined(宏)
...code...
#endif
  • #ifdef#ifndef的使用与上面基本一致
#ifdef MAX
...code...
#endif
#ifndef MAX
...code...
#endif

最新文章

  1. yum使用点滴
  2. PAT A 1018. Public Bike Management (30)【最短路径】
  3. Java多线程开发系列之四:玩转多线程(线程的控制1)
  4. ASM磁盘组空间不足--ORA-15041:DISGROUP DATA space exhausted (生产库案例)
  5. Java同步块
  6. 【HDOJ】3221 Brute-force Algorithm
  7. 如何做好PPT?
  8. NEXT | 不错过任何一个新产品
  9. Google Chrome调试js代码
  10. 【C++】浅谈三大特性之一继承(一)
  11. CCIE-MPLS VPN-实验手册(下卷)
  12. SD详解-销售过程
  13. Java回调机制总结
  14. 关于 Docker Hub 上不能注册 Docker ID 的问题
  15. 洛谷P2045 方格取数加强版(费用流)
  16. 【Python】新建自定义个数的自定义长度名字
  17. 【转载】高可用的MongoDB集群详解
  18. 【CF617D】Roads in Yusland
  19. Codeforces 911D. Inversion Counting (数学、思维)
  20. SM2

热门文章

  1. Git 获取项目git clone
  2. PHP Catchable fatal error: Argument 2 passed to Illuminate\Routing\UrlGenerator::__construct()
  3. (依赖注入框架:Ninject ) 一 手写依赖注入
  4. [JZOJ3347] 【NOI2013模拟】树的难题
  5. xkl的各种沙雕低错
  6. Oracle连接字符串总结
  7. C++——多态
  8. ros-slam的链接
  9. (2)python tkinter-按钮.标签.文本框、输入框
  10. Mysql优化系列之查询性能优化前篇3(必须知道的几个事实)