C 语言 定义别名
C 语言提供了 typedef 关键字用来为类型取一个新的名字。
比如我们给 unsigned char
类型取一个 BYTE
的新名字,可以使用下面的方式
typedef unsigned char BYTE;
在定义了这个新的别名后,标识符 BYTE
可作为类型 unsigned char 的缩写,就像下面这样使用:
BYTE b1, b2;
按照习惯,定义别名时会 大写字母,以便提醒开发者这个类型名称是一个象征性的缩写,当然也可以用小写,如下所示:
typedef unsigned char byte;
我们也可以使用 typedef 为用户自定义的数据类型取一个新的名字。
比如说,可以对结构体使用 typedef 定义一个新的数据类型名字,然后使用这个新的数据类型来直接定义结构变量。
看一个范例演示
/** * file: main.c * author: 简单教程(www.twle.cn) */ #include <stdio.h> #include <string.h> typedef struct WebSite { char name[50]; char domain[50]; char homepage[100]; } Web; int main( ) { Web twle; strcpy( twle.name, "简单教程"); strcpy( twle.domain, "www.twle.cn"); strcpy( twle.homepage, "https://www.twle.cn/"); printf( "网站标题 : %s\n", twle.name); printf( "网站域名 : %s\n", twle.domain); printf( "网站首页 : %s\n", twle.homepage); return 0; }
编译和运行上面的范例,输出结果如下:
$ gcc main.c && a.out
网站标题 : 简单教程
网站域名 : www.twle.cn
网站首页 : https://www.twle.cn/
typedef 和 #define 区别
#define 是 C 预处理器指令,用于为各种数据类型定义别名,与 typedef 类似,但是它们有以下几点不同:
-
typedef 仅限于为类型定义符号名称 #define 不仅可以为类型定义别名,也能为数值定义别名,比如您可以定义 1 为 ONE。
-
typedef 是由编译器执行解释的 #define 语句是由预编译器进行处理的。
当需要定义别名的时候,推荐使用 typedef 关键字 如果是为了修改方便需要,可以使用 #define
范例 : #define 和 typedef 混合使用
/** * file: main.c * author: 简单教程(www.twle.cn) */ #include <stdio.h> #define TRUE 1 #define FALSE 0 typedef unsigned char byte; int main( ) { printf( "TRUE 的值: %d\n", TRUE); printf( "FALSE 的值: %d\n", FALSE); byte c = 'c'; printf("c is:%c\n",c); return 0; }
编译和运行上面的范例,输出结果如下
$ gcc main.c && a.out TRUE 的值: 1 FALSE 的值: 0 c is:c