代码改变世界

C开发系列-预处理指令

2018-04-14 17:42  iCoderHong  阅读(147)  评论(0编辑  收藏  举报

简介

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