define和typedef的区别
enchen 发表于 2007-12-13 17:42:00
define和typedef的区别
    1、#define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不管含义是否正确照样进行替换,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如:
    #define NUM 255
    程序中的:for(i=0; i<NUM; i++) 中NUM会替换为255。
    如果把#define语句中的数字255写成abc预处理也照样置换,而不进行检查。

    而且#define语句是预编译语句,不能在行末加分号,否则会连分号一起置换。
    #define NUM 255;
    程序中的:for(i=0; i<NUM; i++) 会替换为:
    for(i=0; i<255;; i++)

    2、typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,他是语言编译过程的一部分,并不实际分配内存空间。

    3、typedef int * your_int;
       与
       #define your_int int *

    作用都是用int_ptr代表 int * ,但是二者不同:
    #define在预处理时进行简单的替换,而typedef不是简单替换,而是声明一种类型。下面的例子最能说明问题:
    #define your_int int *
    your_int a, b; //相当于int *a, b; 只是简单的宏替换。

    typedef int* your_int;
    your_int a, b; //a, b 都为指向int的指针,相当于int *a, *b;
发表评论:
Powered by Oblog.