iOS - 开发技巧

iOS - define 与 typedef

2018-01-02  本文已影响13人  SkyMing一C
图片源于网络

1. #define

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

2. 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

上一篇 下一篇

猜你喜欢

热点阅读