一 概述
二 类型
三 语句
四 函数
五 数据
六 内存
七 代码
附录
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
5. 别名
为通用类型取别名,命名未命名类型,替换复杂命名。让别名在上下文有更具体含义,使源码更易阅读和理解。
typedef <data_type> <new_name>;
typedef unsigned int size_t; typedef unsigned long long id_t; typedef int code_t[6]; // 数组 (code_t ==> int[6]) typedef int *num_t; // 指针 (num_t ==> int*) typedef void (*callback_t)(char*, int); // 函数指针 (func pointer)
别名对编译器来说,和原类型没什么区别,可直接隐式转换。
typedef uint8_t byte_t; // 别名。 typedef int code_t, id_t; // 定义多个别名。 typedef char char_t, *str_t; // 注意:char, char*
code_t x = 1; id_t y = x; int z = y;
为未命名类型提供有意义的名字,提升代码可读性。
typedef char *str_t; // 指针: str_t ==> char* typedef str_t strings_t[]; // 指针数组:strings_t ==> (char*)[]
int main (void) { strings_t ss = {"a1", "a2", "a3"}; for (int i = 0; i < sizeof(ss) / sizeof(ss[0]); i++) { puts(ss[i]); } return 0; }
#define
和 #define
预处理文本替换不同, typedef
是编译器针对具体类型操作。
int main (void) { #define str_t char * str_t a, b; // char* a, b; ==> char *a, char b static_assert(sizeof(a) == 8); static_assert(sizeof(b) == 1); return 0; }
int main(void) { typedef char *str_t; str_t a, b; // char *a, char *b; static_assert(sizeof(a) == 8); static_assert(sizeof(b) == 8); return 0; }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论