引言
C 语言提供了 typedef 关键字,您可以使用它来为类型取一个新的名字。
用法:
在实际应用中,主要有4种用法:
- 为基本数据类型定义新的类型名;
typedef unsigned char BYTE;
typedef unsigned char byte;
BYTE b1, b2;
byte b1, b2;
在跨平台移植的时候,只需要修改一下 typedef 的定义即可,而不用对其他源代码做任何修改。
typedef long double REAL;
typedef double REAL;
typedef float REAL;
常见的size_t在32位系统上定义为 unsigned int,也就是32位无符号整型。在64位系统上定义为 unsigned long ,也就是64位无符号整型。
- 为自定义数据类型(结构体、共用体和枚举类型)定义简洁的类型名称;
typedef struct tagPoint
{
double x;
double y;
double z;
} Point;
Point oPoint1={100,100,0};
Point oPoint2;
- 为数组定义简洁的类型名称;
typedef int INT_ARRAY_100[100];
INT_ARRAY_100 arr;
- 为指针定义简洁的名称。
使用typedef之前:
int Max(int, int);
int(*p)(int, int);
p = Max;
使用typedef之后
int Max(int, int);
typedef int(*MAX_POINT)(int, int);
MAX_POINT p;
p = Max;
注意事项
- 注意事项一:
typedef char* PCHAR;
int strcmp(const PCHAR,const PCHAR);
此时const PCHAR相当于"char* const ",如果你想const PCHAR相当于”const char*,如下所示:
typedef const char* PCHAR;
int strcmp(PCHAR, PCHAR);
所以为指针声明 typedef,就应该在最终的 typedef 名称中加一个 const,以使得该指针本身是常量。
- 注意事项二:
typedef 是一个存储类的关键字,就像 auto、extern、static 和 register 等关键字一样,所以它们不能同时存在。
typedef static int INT_STATIC;
编译器为提示:
Cannot combine with previous 'typedef' declaration specifier
编译会报错:
error: conflicting specifiers in declaration of ‘INT_STATIC’
参考:
https://m.php.cn/article/455779.html
https://m.runoob.com/cprogramming/c-typedef.html
网友评论