一 typedef
C 语言提供了 typedef 关键字, 你可以使用它来为类型取一个新的名字
下面的实例为单字节数字定义了一个新类型 BYTE:
typedef unsigned char BYTE;
在这个类型定义之后, 标识符 BYTE 可作为类型 unsigned char 的缩写, 例如:
BYTE b1;
按照惯例, 定义时会用大写字母, 以便提醒用户类型名称是一个自定义的名字
当然你也可以使用小写字母:
typedef unsigned char byte;
你也可以使用 typedef 来为用户自定义的数据类型取一个新的名字例如, 你可以对结构体使用 typedef 来定义一个新的数据类型名字, 然后使用这个新的数据类型来直接定义结构体变量, 如下:
例 1
- #include < stdio.h > #include < string.h > typedef struct Book {
- char title[50];
- char author[50];
- char subject[100];
- int book_id;
- }
- BK;
- int main() {
- BK book1;
- /* 声明 book1, 类型为 BK, 即 struct Book */
- /* 给 book1 赋值 */
- strcpy(book1.title, "西游戏");
- strcpy(book1.author, "吴承恩");
- strcpy(book1.subject, "文学");
- book1.book_id = 1001;
- /* 输出 book1 信息 */
- printf("book 1 title : %s\n", book1.title);
- printf("book 1 author : %s\n", book1.author);
- printf("book 1 subject : %s\n", book1.subject);
- printf("book 1 book_id : %d\n", book1.book_id);
- return 0;
- }
运行结果:
book 1 title : 西游戏
book 1 author : 吴承恩
book 1 subject : 文学
book 1 book_id : 1001
二 typedef 与 #define 的区别
define 是 C 指令, 用于为各种数据类型定义别名, 与 typedef 类似, 但是它们有以下几点不同:
1) typedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名, 也能为数值定义别名, 比如您可以定义 1 为 TRUE
2)typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的 (预编译又称为预处理, 是做些代码文本的替换工作比如拷贝 #include 包含的文件代码,#define 宏定义的替换等)
下面是 #define 的最简单的用法:
例 2
- #include <stdio.h>
- #define TRUE 1 // 数值 1 的别名为 TRUE
- #define FALSE 0 // 数值 0 的别名为 FALSE
- int main( )
- {
- printf( "TRUE 的值: %d\n", TRUE);
- printf( "FALSE 的值: %d\n", FALSE);
- return 0;
- }
运行结果:
TRUE 的值: 1
FALSE 的值: 0
来源: http://www.jianshu.com/p/ba6b2ae819df