typedef 类型定义
typedef 为类型起别名、简化复杂声明、typedef vs #define
typedef 类型定义
typedef 给已有类型起一个新名字——不是为了省打字,而是为了让代码更清晰地表达意图。
学完本章你将: 掌握基本 typedef、简化复杂声明、typedef vs #define。
基本用法
c
#include <stdio.h>
// 给基础类型起别名
typedef unsigned char byte;
typedef unsigned long ulong;
typedef int bool;
// 使用
byte b = 0xFF;
ulong timestamp = 1626931200;
// 给结构体起别名
typedef struct {
int x, y;
} Point;
Point p1 = {10, 20};
简化复杂声明
c
// 不用 typedef:难读
int (*comparators[5])(const void *, const void *);
// 用 typedef:清晰
typedef int (*Comparator)(const void *, const void *);
Comparator comparators[5];
typedef 数组
c
// 给数组类型起别名
typedef int IntArray[10];
IntArray arr = {0}; // int arr[10]
// 函数中当参数类型
void printArray(IntArray a) {
for (int i = 0; i < 10; i++) printf("%d ", a[i]);
}
typedef vs #define
c
typedef int *IntPtr;
#define INTPTR int *
IntPtr a, b; // a 和 b 都是 int*
INTPTR x, y; // x 是 int*,但 y 是 int!(宏展开陷阱)
// 结论:定义类型别名用 typedef,不要用 #define