C语言---typedef

文章目录

  • [1. 基本语法](#1. 基本语法)
  • [2. 常见用法](#2. 常见用法)
    • [(1) 简化复杂的类型声明](#(1) 简化复杂的类型声明)
    • [(2) 定义平台无关的类型](#(2) 定义平台无关的类型)
    • [(3) 为指针定义别名](#(3) 为指针定义别名)
    • [(4) 为函数指针定义别名(最能体现价值的地方)](#(4) 为函数指针定义别名(最能体现价值的地方))
  • [3. typedef vs #define 的区别](#define 的区别)
  • [4. 使用建议](#4. 使用建议)

typedef 是 C 语言中的一个关键字,用于为现有的数据类型定义一个新的名字(别名)。它并不会创建新的数据类型,只是给已有的类型起了一个"绰号"。

1. 基本语法

bash 复制代码
typedef 原类型名 新别名;

2. 常见用法

(1) 简化复杂的类型声明

这是 typedef 最常用的场景,尤其是在处理结构体时,可以省略每次声明都要写的 struct 关键字。

bash 复制代码
typedef struct {
    int x;
    int y;
} Point;

// 使用别名定义变量,不需要写 struct Point p1;
Point p1; 

(2) 定义平台无关的类型

为了提高代码的可移植性,常用 typedef 定义固定长度的整型。例如在 stdint.h 中:

bash 复制代码
typedef unsigned int   uint32_t;
typedef unsigned short uint16_t;
typedef unsigned char  uint8_t;

这样在不同位数的 CPU 上,只需修改 typedef 的定义,而不需要改动逻辑代码。

(3) 为指针定义别名

bash 复制代码
typedef char* String;
String str = "Hello World";

(4) 为函数指针定义别名(最能体现价值的地方)

函数指针的原始语法非常晦涩,使用 typedef 可以极大提高可读性。

bash 复制代码
// 定义一个名为 Handler 的别名,它是一个函数指针
// 该函数接收两个 int 参数,返回一个 int
typedef int (*Handler)(int, int);

int add(int a, int b) { return a + b; }

int main() {
    Handler func = add; // 使用别名定义函数指针变量
    int result = func(10, 20);
    return 0;
}

3. typedef vs #define 的区别

虽然两者都可以用来简化代码,但有本质区别:

特性 typedef #define
本质 编译器处理,给类型起别名 预处理器处理,简单的文本替换
作用域 遵循变量作用域规则 全局有效(直到 #undef)
安全性 有类型检查,更安全 无类型检查,仅是字符串替换
指针处理 typedef int* P; P a, b; (a, b 都是指针) #define P int* \n P a, b; (a 是指针, b 是 int)

4. 使用建议

增强可读性:当类型名太长(如复杂的结构体或函数指针)时使用。

抽象数据类型:如果你以后可能改变某个变量的精度(例如从 float 改为 double),用 typedef 定义一个 RealNumber,修改时只需改动一处。

不要过度使用:对于简单的基本类型(如 int),除非是为了跨平台兼容性,否则不建议随意起别名,以免增加代码阅读者的认知负担。

相关推荐
先吃饱再说11 小时前
判断回文字符串,从一行代码到双指针优化
算法
见过夏天12 小时前
C++ 基础入门完全指南
c++
黄敬峰14 小时前
深入理解算法核心:从递归思想、数组扁平化到快速排序
算法
得物技术15 小时前
从狂野代码到按目标生产:得物推荐 AI Harness 的工程化实践|AICon 演讲整理
人工智能·算法·架构
AI小老六19 小时前
SkillOpt 架构拆解:把 Skill 文本当参数,用执行轨迹训练 Agent
后端·算法·ai编程
胡萝卜术19 小时前
从“分数打架”到“排名投票”:为什么你的ChatBI必须用RRF?
算法·设计模式·面试
Asize20 小时前
初识DFS 与 BFS:递归、队列与图遍历
算法
罗西的思考1 天前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
美团技术团队2 天前
LongCat 开源 VitaBench 2.0:长期动态智能体基准新标杆
人工智能·算法