【答】
1. typedef
① typedef通常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间。
② typedef在编译阶段有效,由于是在编译阶段,因此typedef有类型检查的功能。
③ typedef用来定义类型的别名,这些类型不只包含内部类型(int,char等),还包括自定义类型(如struct)。此外,typedef还可以定义机器无关的类型。
④ typedef有自己的作用域。
⑤ typedef以分号结尾。
⑥ typedef修饰指针类型时:
typedef int * PINT1;
Const PINT1 p; // p不可更改,p指向的内容可以更改,相当于 int * const p;
⑦ typedef可以增强程序的可读性,以及标识符的灵活性,但它也有“非直观性”等缺点。
2. #define
① #define是预处理指令,通常用来定义常量(包括无参量与带参量),以及用来实现一些复杂的宏。
② #define是宏定义,发生在预处理阶段,也就是编译之前,它只进行简单而机械的字符串替换,而不进行任何检查。
③ #define不但可以为类型取别名,还可以定义常量、变量、编译开关等。
④ #define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用。
⑤ #define不需要以分号结尾。
⑥ #define修饰指针类型时:
#define PINT2 int *
const PINT2 p; // p可以更改,p指向的内容不能更改,相当于const int *p;或int const *p;
1. typedef
① typedef通常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间。
② typedef在编译阶段有效,由于是在编译阶段,因此typedef有类型检查的功能。
③ typedef用来定义类型的别名,这些类型不只包含内部类型(int,char等),还包括自定义类型(如struct)。此外,typedef还可以定义机器无关的类型。
④ typedef有自己的作用域。
⑤ typedef以分号结尾。
⑥ typedef修饰指针类型时:
typedef int * PINT1;
Const PINT1 p; // p不可更改,p指向的内容可以更改,相当于 int * const p;
⑦ typedef可以增强程序的可读性,以及标识符的灵活性,但它也有“非直观性”等缺点。
2. #define
① #define是预处理指令,通常用来定义常量(包括无参量与带参量),以及用来实现一些复杂的宏。
② #define是宏定义,发生在预处理阶段,也就是编译之前,它只进行简单而机械的字符串替换,而不进行任何检查。
③ #define不但可以为类型取别名,还可以定义常量、变量、编译开关等。
④ #define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用。
⑤ #define不需要以分号结尾。
⑥ #define修饰指针类型时:
#define PINT2 int *
const PINT2 p; // p可以更改,p指向的内容不能更改,相当于const int *p;或int const *p;