美文网首页iOS - 开发技巧
iOS - define 与 typedef

iOS - define 与 typedef

作者: SkyMing一C | 来源:发表于2018-01-02 17:25 被阅读13次
图片源于网络

1. #define

  • #define是预处理指令,在编译预处理时进行简单的替换

  • #define不作正确性检查,只有在编译时才会发现可能的错误并报错

  • #define更详细的介绍 快点我呀

#define   INT    int
#define   TRUE    1
#define   ADD (a,b)    ((a)+(b));
#define   LOOP  for (int i=0; i<10; i++)

2. typedef

  • 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名(在自己的作用域内给一个已经存在的类型一个别名

  • typedef是语言编译过程的一部分,但它并不实际分配内存空间

  • typedef可以增强程序的可读性,以及标识符的灵活性。常用于简化复杂类型,变量类型意义化等。

typedef double MyDouble;  //给double取别名为MyDouble(变量类型意义化)

typedef NSTimeInterval MyTimeInterval;  //给NSTimeInterval取别名为MyTimeInterval

typedef char * MyString;  //给char *取别名为MyString

typedef struct Person
{
    char *name 
}MyPerson;  //给Person结构体取别名为MyPerson。使用:MyPerson p = {"jack"};

typedef enum Man
{
    man,
    woman 
} MyMan;  //给Man枚举取别名为MyMan。使用: MyMan man = man;

typedef void(^MyBlock) (int a,int b);  //给block取别名MyBlock

typedef int(*MyFunction) (int a,int b);  //给指向函数的指针取别名MyFunction

3. typedef#define的区别

  1. 执行时间不同

    • typedef在编译阶段有效。typedef有类型检查的功能。

    • #define则是宏定义,发生在预处理阶段。在编译预处理时进行简单的替换,不进行任何检查。

  2. 功能不同

    • typedef是类型替换,语句的一种,结尾必须有;

    • #define是文本替换,属于预编译指令,本身不参与编译,除非希望替换的文本中有;否则不用加。

    例如:

    • 若使用typedef char * MyString;则 MyString s1,s2 等价于 char *s1; char *s2

    • 若使用 #define MyString char * 则 MyString s1,s2 等价于 char *s1,s2 即 char *s1; char s2

    • 再次说明了typedef是类型替换,直接参与编译,而define只是简单的文本替换。

  3. 作用域不同

    • typedef若写在方法/函数中,则其作用域只在此方法/函数中有效。

    • #define若写在方法/函数中,则其作用域从写的地方开始有效,直至使用#undef(不写此指令则后面一直有效)。

参考

typedef和define的详细区别

iOS 谈谈 typedef 和 define

相关文章

网友评论

    本文标题:iOS - define 与 typedef

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