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),除非是为了跨平台兼容性,否则不建议随意起别名,以免增加代码阅读者的认知负担。

相关推荐
workflower3 小时前
用硬件换时间”与“用算法降成本”之间的博弈
人工智能·算法·安全·集成测试·无人机·ai编程
爱编码的小八嘎3 小时前
C语言完美演绎6-17
c语言
小樱花的樱花3 小时前
C++ new和delete用法详解
linux·开发语言·c++
重生之我是Java开发战士4 小时前
【动态规划】简单多状态dp问题:按摩师,打家劫舍,删除并获得点数,粉刷房子,买卖股票的最佳时机
算法·动态规划·哈希算法
DfromY5 小时前
【随手记】YOCTO下MQTT使用简记
c语言·网络协议
努力的章鱼bro5 小时前
操作系统-FileSystem
c++·操作系统·risc-v·filesystem
96775 小时前
cURL curl
c++
一匹电信狗5 小时前
【Linux我做主】进程程序替换和exec函数族
linux·运维·服务器·c++·ubuntu·小程序·开源
KAU的云实验台5 小时前
单/多UAV、静/动态路径规划,基于PlatEMO平台的带约束多目标优化 本文核心内容:
算法·matlab·无人机