一. 定义
关键字typedef故名思意就是类型定义的意思,但是它并不是定义一个新的类型而是给已有的类型起一个别名,如内部数据类型(int,char等)和自定义数据类型(struct等)。
#define则是宏定义,它只进行简单而机械的字符串替换。
二. 区别
1. 执行时间不同
关键字typedef在编译阶段有效,由于是在编译阶段,因此typedef有类型检查的功能。
#define则是宏定义,发生在预处理阶段,也就是编译之前,它只进行简单而机械的字符串替换,而不进行任何检查。
//typedef会做相应的类型检查
typedef unsigned int UINT;
void func()
{
UINT value = "abc"; // error C2440: 'initializing' : cannot convert from 'const char [4]' to 'UINT'
cout << value << endl;
}
//#define简单的替换
#define f(x) x*x
int main()
{
int a=6, b=2, c;
c=f(a) / f(b);
printf("%d\n", c);
return 0;
}
//输出结果: 6 * 6 / 2 * 2 = 36
2. 作用域不同
#define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用。
typedef有自己的作用域。
#include <stdio.h>
void func1()
{
#define HW "HelloWorld";
}
void func2()
{
char * str = HW;
printf("%s\n",str);
}
int main()
{
func2();
return 0;
}
//输出结果:HelloWorld
#include <stdio.h>
void func1()
{
typedef unsigned int UINT;
}
void func2()
{
UINT utmp =