typedef和define有什么区别
typedef 和define 都是替一个对象取一个别名,以此增强程序的可读性,区别如下:
使用不用
define 定义后面不用加分号,并且它的别名在对象的前面
typedef需要加分号,并且它的别名后面在替换对象的前面
原理不同
define是C语言中定义的语法,是预处理指令,在预处理进行简单而机械的字符串替换,不作正确性检查,只有在编译已被展开的源程序时才会发现可能的错误并报错。
typedef是关键字,在编译时处理,有类型检查功能。他在自己的作用域内给一个已经存在的类型一个别名,但不能在一个函数定义里面使用typedef。用typedef定义数组、指针、结构等类型会带来很大的方便 ,不仅使程序书写简单,也使意义明确,增强可读性。
功能不同
typedef用来定义类型的别名,起到类型易于记忆的功能。另一个功能时定义机器无关的类型。如定义一个REAL的浮点类型,在目标机器上它可以获得最高的精度:typedef long double REAL,在不支持long double的机器上,看起来是这样的,typedef double REAL,在不支持double的机器上,是这样的,typedef float REAL
define不只是可以为类型取别名,还可以定义常量、变量、编译开关等。
作用域不同
define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用,而typedef有自己的作用域
常见问题
与const组合
typedef char* pstr
"const pstr p" 会被解释为"char* const p:" 不能更改指向的地址(指针常量---地址是个常量,指针的内容是可以更改的)
如果是define则会被解读为const char* p 指针指向一个常量,可以更改指向的地址。
define和函数的区别
define 不会开辟空间 而函数会开辟堆栈空间
#include "stdafx.h"
#define MAX(A,B) ((A)>(B)?(A):(B))
int main(int argc, char* argv[])
{
printf ("%d",MAX(5,6));
printf("Hello World!\n");
return 0;
}
int Function(int x ,int y)
{
return x>y?x:y;
}
| 1、宏名标识符与左圆括号之间不允许有空白符,应紧接在一起. |
|---|
| 2、宏与函数的区别:函数分配额外的堆栈空间,而宏只是替换. |
| 3、为了避免出错,宏定义中给形参加上括号. |
| 4、末尾不需要分号. |
| 5、define可以替代多行的代码,记得后面加 \ |
- 6.#define MALLOC(n,type)((type)malloc((n)sizeof(type)))

浙公网安备 33010602011771号