typedef
obeys scoping rules just like variables, whereas define
stays valid until the end of the compilation unit (or until a matching undef
).
Also, some things can be done with typedef
that cannot be done with define
.
For example:
typedef int* int_p1;
int_p1 a, b, c; // a, b, c are all int pointers
#define int_p2 int*
int_p2 a, b, c; // only the first is a pointer, because int_p2
// is replaced with int*, producing: int* a, b, c
// which should be read as: int *a, b, c
typedef int a10[10];
a10 a, b, c; // create three 10-int arrays
typedef int (*func_p) (int);
func_p fp; // func_p is a pointer to a function that
// takes an int and returns an int
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…