typedef与#define的区别

 #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。
 
  
也许您已经注意到#define 不是语句 不要在行末加分号,否则 会连分号一块置换。
 
  
 
  
typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名。
举个例子:typedef (int *) pint; pint a,b; 等于 int *a; int *b;
                 #define PINT  int*; PINT a,b 等于 int *a,b; 也就是int *a;int b;
从这么 我们不难发现,typedef只是为了增加可读性而为标识符另起的新名称(仅仅只是个别名),而#define原本在C中是为了定义常量,到了C++,const、enum、inline的出现使它也渐渐成为了起别名的工具。有时很容易搞不清楚与typedef两者到底该用哪个好,如#defineINT int这样的语句,用typedef一样可以完成,用哪个好呢?我主张用typedef,因为在早期的许多C编译器中这条语句是非法的,只是现今的编译器又做了扩充。为了尽可能地兼容,一般都遵循#define定义“可读”的常量以及一些宏语句的任务,而typedef则常用来定义关键字、冗长的类型的别名。
 
  
 
  
    
                  
 
 

你可能感兴趣的:(C语言,typedef,#define)