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

相关推荐
轩情吖1 天前
Qt的窗口
开发语言·c++·qt·窗口·工具栏·桌面级开发
L186924547821 天前
无外设条件下的自动找眼V2
c++
hcnaisd21 天前
深入理解C++内存模型
开发语言·c++·算法
李老师讲编程1 天前
C++信息学奥赛练习题-杨辉三角
数据结构·c++·算法·青少年编程·信息学奥赛
zxsz_com_cn1 天前
设备预测性维护算法核心功能有哪些?六大模块拆解智能运维的“技术骨架”
运维·算法
期末考复习中,蓝桥杯都没时间学了1 天前
力扣刷题13
数据结构·算法·leetcode
qq_296544651 天前
短视频下载教程,抖音B站视频下载
c++
2201_756989091 天前
C++中的事件驱动编程
开发语言·c++·算法
多米Domi0111 天前
0x3f 第48天 面向实习的八股背诵第五天 + 堆一题 背了JUC的题,java.util.Concurrency
开发语言·数据结构·python·算法·leetcode·面试
2301_822377651 天前
模板元编程调试方法
开发语言·c++·算法