typedef int Integer;
Integer a = 8;
typedef Integer MyInteger; // 別名鏈
typedef char *String;
String s = "hello"; // 等價於 char *s
typedef struct Person { int age; char *name; } Person;
Person p = {18, "Tom"}; // 無需寫 struct
或匿名結構體直接起別名:
typedef struct { int age; } Stu;
Stu s = {20};
typedef struct LNode { int data; struct LNode *next; } LinkList, *LinkListPtr;
LinkList node; LinkListPtr p = &node;
typedef enum { SPRING, SUMMER, AUTUMN, WINTER } Season;
typedef int (*FuncPtr)(int, int);
int add(int a, int b) { return a+b; }
FuncPtr f = add;
int r = f(3,5); // 8
typedef char *String;
String s1, s2; // 展開為 char *s1, *s2;
#define String char *
String s3, s4; // 展開為 char *s3, s4; // s4 是 char 非指針!
typedef 在編譯器類型系統中生效,#define 只是文本替換,指標類型別名務必用 typedef。