文章目录
1 typedef的用法
1.1 typedef的意义
typedef用于定义一种新的类型,这句话是错误的!
typedef的意义:
- typedef用于给一个已经存在的数据类型重命名。
- typedef本质上不能产生新的类型。
typedef重命名的类型需要注意:
- 可以在typedef语句之后定义。
- 不能被unsigned和signed修饰。
用法: typedef type new_name
。
2 typedef和#define的区别
2.1 typedef和#define效果等同的情况
首先,我们必须明白#define只是预处理指令,只能进行简单的文本替换;而typedef是给已经存在的类型的进行重命名,用来简化程序的书写以及提高程序的可移植性。另外需要知道,typedef所定义的类型是在编译阶段进行处理的。也就是说,typedef和#define的本质是不一样的。
对于如下代码,typedef和#define可以起到相同的效果:
typedef int int32_t;
#define int32_t int
int32_t a, b;
2.2 typedef和#define效果不等同的情况
如果我们将上面的int类型换成int*类型,那么两者的效果将不再等同,这里需要特别注意:
typedef int* int32_t;
int32_t a, b;
/* 等同于如下代码 */
int *a, *b;
#define int32_t int*
int32_t a, b;
/* 等同于如下代码 */
int* a, b;
3 typedef特殊之处
3.1 typedef特殊之处
如下代码中的p代表什么含义?
typedef int* pInt;
const pInt p;
p = NULL; // error
我们需要知道pInt对于编译器来说是一个整体,那么就是指p这个变量不能出现在赋值符号的左边。
参考资料: