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行 
 %@

",__func__,__LINE__,[NSString stringWithFormat:__VA_ARGS__])
#else         //否则的话就执行NSLog
#define NSLog(...)
#endif

  (2)、#ifdef

#ifdef DEBUG  //如果定义DEBUG这个宏就执行下面的第d%行
#define NSLog(...) NSLog(@"%s 第%d行 
 %@

",__func__,__LINE__,[NSString stringWithFormat:__VA_ARGS__])
#else         //否则的话就执行NSLog
#define NSLog(...)
#endif

(3)、#if   else

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

      

         

原文地址:https://www.cnblogs.com/huihuizhang/p/12789205.html