#define和预处理指令

#define和预处理指令--(妖妖随笔)

预处理过程是先于编译器对源代码进行处理(进行初步的转换),产生新的源代码提供给编译器。

格式:预处理指令是以#开头的代码行,#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。

#空指令             没有任何效果

#include           引入一个源代码文件

#define             定义宏

#undef              取消定义宏

#if                    如果条件为真,则编译下面的代码

#elif                 如果前面的#if不为真,则编译下面的代码

#endif              结束一个#if...#elif条件编译块

#ifdef               如果已经定义了某个宏,则编译下面的代码

#ifndef             如果没有定义某个宏,则编译下面的代码

#error              停止编译并显示错误信息

1.防止重复引用的代码:

#ifndef A_H    意思是"if not define a.h"  如果不存在a.h

#define A_H   就引入a.h

#endif           否则不需要引入

#ifndef _OBJC_RUNTIME_H  //如果不存在_OBJC_RUNTIME_H

#define _OBJC_RUNTIME_H  //就引入_OBJC_RUNTIME_H(定义宏)

#include <objc/objc.h>   //引入文件

#include <stdarg.h>

#include <stdint.h>

#include <stddef.h>

#include <Availability.h>

#include <TargetConditionals.h>

#if TARGET_OS_MAC        //如果条件为真,就编译下面的代码

#include <sys/types.h>

#endif                   //结束条件编译块

2.根据条件创建一个Button:

        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];

        btn.frame = CGRectMake(0, 0, 100, 100);

        [btn addTarget:self action:@selector(btnClicked) forControlEvents:UIControlEventTouchUpInside];

        [self.view addSubview:btn];

但是根据新的需求,这个Button暂时不需要显示在界面上面,这时候可以使用预处理指令来进行条件判断

(1)第一种方法,定义一个具体的宏

#define _SHOWBTN_ 0

{

        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];

        btn.frame = CGRectMake(0, 0, 100, 100);

        [btn addTarget:self action:@selector(btnClicked) forControlEvents:UIControlEventTouchUpInside];

        [self.view addSubview:btn];

#if _SHOWBTN_

        [self.view addSubview:btn];  //如果需要显示按钮,将其添加到父视图中

#else

        //不将其添加到父视图中 

#endif

}

使用:这时候如果想显示该Button对象,那么将#define _SHOWBTN_ 1,否则写为#define _SHOWBTN_ 0

(2)第二种方法(定义一个没有数值的宏)

#ifdef _SHOWBTN_

  [self.view addSubview:btn];

#endif

这段代码的意思就是如果定义了宏_SHOWBTN_,那么就将btn添加到父视图,如果没有定义的话,那么不添加到父视图。

使用:这时候如果我们想要将其添加到父视图,则在文件的顶部写上#define _SHOWBTN_

爱code的妖妖
原文地址:https://www.cnblogs.com/yaoyao0110/p/4812144.html