Objective-C IOS 预处理 宏 #define

 目录:

    (1)分类

(2)特点

(3)宏定义的基本操作

(4)宏的高级用法:(带参数的用法)

(5)条件编译指令

  一、分类:

         (1)文件包含指令:#include

(2) 宏定义

(3)条件编译指令

 

    二、特点:

         (1)都是以#开头

(2)预处理指令都是在编译之前执行

(3)预处理指令后面都没有分号

 

    三、宏定义的基本操作

1、 预处理命令,在编译之前运行

2、 作用:可以为一段代码定义1个标识,如果要使用这个代码,直接使用标识就可以

3 、 语法: #define  宏名  值

#define 宏名 值
#define name @"张三"

4、 原理:在预编译的时候,就会执行源文件中的预处理命令

会将代码中使用宏名的地方替换为宏值

 

5、需要注意的地方:

(1)宏值可以是任意的东西,定义的时候并不会检查语法;

(2)如果宏值是一个表达式,那么宏值并不是这个表达式的结果,而是这个表达式本身;

#define num (1+10+90)

(3)如果宏值当中包含变量名,在使用之前必须保证这个变量已经存在

#define Q a+a

(4)宏的作用域:

可以定义在函数的内部,也可以定义在函数的外面

从定义宏的地方,后面的所有的地方,都可以直接使用;

(5)#undef  宏名

可以让指定的宏提前消失

(6)双引号中的内容不会认为是宏名;

(7)宏的层层替换,可以使用

#define h 3
#define w 3.14
#define S h*w

(8)宏值后面可以添加分号,但是添加的分号作为宏值一起给宏名;

(9) 可以定义任意代码段为宏

 

#define和 typedef的区别:

1).  #define是一个预处理指令,在预编译的时候执行,在预编译的时候把宏名替换成宏值;

typedef是C语言代码, 在代码云行的时候才会执行,

2)#define 可以将任意的代码取1个标识符

typedef只能为数据类型取名字

 

四、宏的高级用法:(带参数的用法)

1.使用有参数的宏,就必须在使用的时候传值

#define N(a) a+a+a
//使用
N(1)
#define sum(a,b) a+b
//使用
sum(1, 2)

注意: 使用:宏不是函数,宏的参数不需要加类型

如果换行,宏就结束了

 

五、 条件编译指令

1、 (1) 预处理指令,预编译阶段执行

(2)可以让编译器只编译部分指令

2、使用:

条件编译的条件只能是宏,不能是函数变量

 

(1)、#ifndef

#endif
#ifndef DEBUG //如果没有定义DEBUG这个宏就执行下面的第d%行
#define NSLog(...) NSLog(@"%s 第%d行 \n %@\n\n",__func__,__LINE__,[NSString stringWithFormat:__VA_ARGS__])
#else //否则的话就执行NSLog
#define NSLog(...)
#endif

(2)、#ifdef

#ifdef DEBUG //如果定义DEBUG这个宏就执行下面的第d%行
#define NSLog(...) NSLog(@"%s 第%d行 \n %@\n\n",__func__,__LINE__,[NSString stringWithFormat:__VA_ARGS__])
#else //否则的话就执行NSLog
#define NSLog(...)
#endif

(3)、#if   else

#if debug==0
#define BASEURL @"测试"
#else
#define BASEURL @"正式"
#endif

Objective-C IOS  预处理 宏 #define-上流阁

*文章为作者独立观点,不代表上流阁立场
本文由 江风成 授权 上流阁 发表,并经上流阁编辑。转载此文章须经作者同意,并请附上出处(上流阁)及本页链接。原文链接https://www.o6c.com/ios/2022/03/13/1526.html
发表评论

坐等沙发
相关文章
Objective-C IOS  JSON序列化,以及NSdata、NSString、NSDictionay之间的转换
Objective-C IOS JSON序列化,以及NSda…
Objective-C IOS UITextField的各种属性设置
Objective-C IOS UITextField的各种属性…
Objective-C IOS UITextField输入框下键盘显示
Objective-C IOS UITextField输入框下键…
MacBook MAC系统显示隐藏文件和.点开头文件方法
MacBook MAC系统显示隐藏文件和.点开头…
IOS开发wkwebview与HTML页面JS互相交互的干货
IOS开发wkwebview与HTML页面JS互相交互…
javaweb开发程序员php开发,微信开发。接受定制开发

最新评论