#define和typedef的比较以及#define与函数的不同

来源:互联网 发布:数据分析表格 编辑:程序博客网 时间:2024/05/22 03:10
#define和typedef的比较
1:typedef是声明新的类型名,使用新的类型名代替原有的类型名,
   而且typedef是在编译的时候有用,所以会进行类型的检测。
   而#define是在预编译的时候进行简单的宏替换,所以不会进行检测。
2:对待指针时的不同
   例如:
     #define int*  Pi;Pi a,b;的意思是定义了一个指向整形的指针和第一了一个整形指针。
     typedef PI int*;PI a,b;的意思是定义了两个都指向整形的指针。
    由此可见,#define是一种替换,而typedef包含了一种类型,具有整体“封装”的作用。
3:末尾的不同
  typedef定义时后面必须有分号,但#define后面如果是类型的话,加分号就会出错,如果是一条语句的话,就会当做一个空语句来实行。
4:定义时的顺序不同
  #define定义时是替换量在前面,而typedef替换时是替换量在后面。
5:#define不仅可以定义类型取别名,而且可以定义常量和变量。
那么#define和函数有什么不同那。
1:函数有他的格式,对于他的参数必须有一个类型,但是用#define就可以来定义与类型无关的。
 例如:#define malloc(n,type)   ((type*)malloc((n)*sizeof(type)))
    pi=malloc(3,int)=((int*)malloc((3)*sizeof(int)))是不是方便很多。
2:从空间和时间来说,#define在预编译的时候就进行了替换,但是它要替换代码里面的每一行,所以,它有点拿空间换时间的感觉,而函数在调用的时候为它分配空间,结束的时候释放了,所以空间是固定的,不会改变,但是分配空间和回收空间要话费时间。

 
原创粉丝点击