typedef的作用:重命名变量数据类型
语法:typedef [数据类型] [新的名字]
eg.typedef int * pointer;//将int * 的数据类型命名为pointer
typedef VS define:
①预处理时define定义的宏会替换,但typedef定义的别名不会替换。
②作用域不同
③通常用于给自定义数据类型其别名
size_t : unsigned long的别名
typedef 在预处理后不作替换处理,且语句后需加分号;作用域为当前大括号中,而宏定义则为全局通用;typedef一般用于结构体,eg:typedef struct stu{ } stu_t ;
typedef
typedef 与#define作用域不同:
#define如果写到了自定义函数里面,在这函数外面还是可以使用的
但typedef就不行了。
定义 结构体
struct stu{
}
在使用这个结构体的时候麻烦
:struct stu xxx;
所以常常这样写
typedef struct stu{
}stu_t;
之后通过 stu_t xxx;创建结构体
与宏相近的语法:typedef(type define)
作用:给变量类型起别名,当你感觉某变量名别扭,甚至数据类型名别扭时。。经常用在给自定义的数据类型起名字
比如数据类型size_t实际是系统用typedef语法处理了
typedef unsigned long size_t
注意:宏#define 眼里是没有C语法的,所以不以分号结尾。
但typedef是C 需要以;结尾
注意:typedef int *p意义是:int *=p,所以p q=指针q
区别:在经过预处理后 typedef起的别名是不会替换回去的
typedef的作用:重命名变量数据类型
语法:typedef [数据类型] [新的名字]
eg.typedef int * pointer;//将int * 的数据类型命名为pointer
typedef VS define:
①预处理时define定义的宏会替换,但typedef定义的别名不会替换。
②作用域不同
③通常用于给自定义数据类型其别名
size_t : unsigned long的别名
宏的好处在于可以不指定数据类型,因为宏是不管语法的
typedef 起别名 u8,u16之类的,也可以对函数进行起别名
如 typedef int main(){} naim --> 将int main() 一整个函数定义为naim
typedef有作用域的问题
define没有作用域的问题
而且,typedef 是在 .i文件之后执行的,会被C语言的语法所限制,而define 不会
本质上是和宏定义类似的关键字。
写法:typedef 原名 别名;
typedef int *p;//int *别名是p
经过预处理之后,别名不会被替换
作用域和#define不同,非全局。
typedef VS define:
①预处理时define定义的宏会替换,但typedef定义的别名不会替换。
②作用域不同
③通常用于给自定义数据类型其别名
size_t : unsigned long的别名
define的作用域是宏定义下面的所有代码
typedef:关键字,给变量类型起别名,预处理之后不会被替换,有作用域
typedef int a;(以分号为结尾)
typedef int *p;(给int* 起别名叫p)
p q=NULL;//int *q=NULL;
结构体:
typedef unsigned long size_t
struct stu{};
stuct stu XXX;
typedef struct stu{}stu_t;
stu_t XXX;
typedef有作用域的问题
define没有作用域的问题
在预编译阶段 #define段会把内容替换 但typedef并不会
.i文件是进行预编译之后生成的文件,一般都是把头文件包含进去,进行宏替换这些工作之后生成的文件。
struct stu{};
// 使用
struct stu xxx;
//通过别名
typedef struct stu{
} stu_t;
stu_t xxx; // 与上上面的一致
typedef 相当于给类型取一个别名
typedef int tni; tni a = 0; // int a = 0; typedef int* p; p q = NULL; //int *q = NULL;
define不遵从C语法,typedef遵从C语法
typedef 语法特性:
是一种语法,不是一种预处理;
存在作用域;
给自写的数据类型取个好看的类名;
简化结构体的声明语句。
typedef与#define易混淆
typedef有作用域;要用分号结束;遵循C语言语法规则;只是别名,预处理时不替换;
typedef 给变量类型取别名。
typedef 是一个关键字,不参与预处理,给变量类型起别名
格式:typedef 类型 别名;
例子:typedef int *p;
p q = NULL; 相当于 int *q = NULL;
宏的作用域是整个程序文件,即使写在某个函数里面,还是可以全局调用
typedef是有作用域的,在全局中写作用全局,在函数内写,作用在函数内