美文网首页
OC宏定义

OC宏定义

作者: 贴心凝姐_iOS | 来源:发表于2017-11-17 10:28 被阅读0次

    usr/include


    #空指令,无任何效果

    #include 包含一个源代码文件

    #define 定义宏

    #undef 取消已定义的宏

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

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

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

    #elif 如果前面的#if给定条件不为真,当前条件为真,则编译下面代码

    #endif 结束一个#if……#else条件编译块

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

    资料来源:http://blog.csdn.net/wwwang89123/article/details/17436577


    #define 是预处理命令,在编译预处理时进行简单的替换,不作正确性检查

    typedef 是编译时处理,在自己的作用域内给一个已经存在的类型一个别名

    宏定义只是简单的字符串代换(原地扩展),而typedef则不是原地扩展,它的新名字具有一定的封装性,以致于新命名的标识符具有更易定义变量的功能。请看上面第一大点代码的第三行:

    typedef    (int*)      pINT;以及下面这行:#define    pINT2   int*

    效果相同?实则不同!实践中见差别:pINT a,b;的效果同int *a; int *b;表示定义了两个整型指针变量。而pINT2 a,b;的效果同int *a, b;表示定义了一个整型指针变量a和整型变量b。

    注意:两者还有一个行尾;号的区别哦!


    宏的高级使用

    1)__VA_ARGS__:总体来说就是将左边宏中 ... 的内容原样抄写在右边 __VA_ARGS__ 所在的位置。它是一个可变参数的宏,是新的C99规范中新增的,目前似乎只有gcc支持(VC从VC2005开始支持)。要注意的是,printf 的输出格式是括号内左边是字符串,右边是变量,而且右变量与左输出格式是一一对应的。

    2) __FILE__ :宏在预编译时会替换成当前的源文件名

    3) __LINE__:宏在预编译时会替换成当前的行号

    4) __FUNCTION__:宏在预编译时会替换成当前的函数名称

    PS:编译过程:

    1,扫描解析文件

    2,预处理(宏在此时处理,该替换的文字会被替换)

    3,对处理过的源代码进行汇编,输出汇编语言的代码(C语言的控制流程被处理)

    4,编译为二进制目标文件

    5,与程序库进行链接,输出最终的程序文件

    (宏 和 C语言在不同的阶段处理执行)

    参考官方:http://gcc.gnu.org/onlinedocs/cpp/Macros.html#Macros

    在宏定义中,如果要换行,使用“\"符号。然后经预处理后还是在同一行。

    使用"##"操作符可以实现宏中token的连接。

    资料来源:http://blog.csdn.net/songrotek/article/details/8929963


    相关文章

      网友评论

          本文标题:OC宏定义

          本文链接:https://www.haomeiwen.com/subject/ecllvxtx.html