C 语言编程 — 数据类型的别名
目录
前文列表
《程序编译流程与 GCC 编译器》
《C 语言编程 — 基本语法》
《C 语言编程 — 基本数据类型》
《C 语言编程 — 变量与常量》
《C 语言编程 — 运算符》
《C 语言编程 — 逻辑控制语句》
《C 语言编程 — 函数》
《C 语言编程 — 高级数据类型 — 指针》
《C 语言编程 — 高级数据类型 — 数组》
《C 语言编程 — 高级数据类型 — 字符串》
《C 语言编程 — 高级数据类型 — 枚举》
《C 语言编程 — 高级数据类型 — 结构体与位域》
《C 语言编程 — 高级数据类型 — 共用体》
《C 语言编程 — 高级数据类型 — void 类型》
typedef
在 C/C++ 编程语言中,typedef
关键字用来为特定的数据类型取一个别名,或者将其称之为 “定义了一种新的数据类型”。无论如何,其最终的目的是为了使源代码更易于阅读和理解。它通常用于简化声明复杂的数据类型组成的结构 。
比如,在 C 中没有 bool 类型,于是很可能出现一个程序员使用 int,一个程序员使用 short 的情况,会比较混乱。这时最好使用一个 typedef 来定义一个统一的 bool 类型:
typedef char bool_t;
- 1
_t 表示这些数据类型是通过 typedef 来定义的,而不是新的数据类型。也就是说,它们其实是我们已知的数据类型的别名。这样就便于代码的维护。
另外,在涉及到跨平台时,不同的平台会有不同的字长,所以利用预编译和 typedef 可以方便的维护代码,例如:uint8_t、uint16_t 等。
typedef signed char int8_t; typedef short int int16_t;
- 1
- 2
- 创建 BYTE 作为无符号单字符类型的别名
typedef unsigned char BYTE;
// 使用自定义的数据类型 BYTE 来定义无符号单字符类型变量
BYTE b1, b2;
- 1
- 2
- 3
- 4
- 创建函数指针 PFI 的别名
typedef int (*PFI)(char *, char *);
- 1
也可以使用 typedef 来为自定义的数据类型取一个新的名字,例如:可以对结构体使用 typedef 来定义一个新的别名(数据类型),然后使用这个新的数据类型来直接定义结构变量:
#include <stdio.h>
#include <string.h>
typedef struct BOOKS { char title[50]; char author[50]; char subject[100]; int id;
} MyBook;
int main() { MyBook book1; strcpy(book1.title, "C"); strcpy(book1.author, "Runoob"); strcpy(book1.subject, "C"); book1.id = 123; printf("Book's title: %s\nauthor: %s\nsubject: %s\nid: %d\n", book1.title, book1.author, book1.subject, book1.id); return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
关键字 typedef 和预处理器指令 #define 的区别
#define 是 C 的预处理器指令,也称之为 C 指令,用于为各种数据类型定义别名,与关键字 typedef 类似,但是它们有以下几点不同:
- typedef 仅限于自定义数据类型标识符的别名,#define 不仅可以为数据类型定义别名,也能为实际的数值定义别名。
- typedef 是由编译器处理的,#define 语句是由预处理器进行处理的。
#include <stdio.h>
/* 自定义常量 */
#define TRUE 1
#define FALSE 0
int main() { printf( "TRUE 的值: %d\n", TRUE); printf( "FALSE 的值: %d\n", FALSE); return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
文章来源: is-cloud.blog.csdn.net,作者:范桂飓,版权归原作者所有,如需转载,请联系作者。
原文链接:is-cloud.blog.csdn.net/article/details/105308757
- 点赞
- 收藏
- 关注作者
评论(0)