
文章目录
- 1 typedef 的用法
- (1) 基本类型
- (2) 结构体的使用
- **3) 混合使用**
- 2 define 的用法
- 3 typedef 和 define 的区别
- 参考资料
注:转载请标明原文出处链接:https://xiongyiming.blog.csdn.net/article/details/101542039
1 typedef 的用法
在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间。
typedef可以增强程序的可读性,以及标识符的灵活性,但它也有“非直观性”等缺点。
typedef的用途: 为已有的数据类型重新命名。
(1) 基本类型
int a=10;
//为整型重新命名
typedef int ZS;
ZS b=10;
(2) 结构体的使用
1) 为结构体重新命名
//ST---->等价于struct Student
typedef struct Student
{
int id;
char sex;
}ST;
2) 为结构体重新命名(指针类型)
//PST---->等价于struct Student*
typedef struct Student
{
int id;
char sex;
}* PST;
3) 混合使用
//PST等价于struct Student*
//ST等价于struct Student
typedef struct Student
{
int id;
char sex;
}* PST,ST;
2 define 的用法
#define为一宏定义语句,通常用它来定义常量(包括无参量与带参量),以及用来实现那些“表面似和善、背后一长串”的宏,它本身并不在编译过程中进行,而是在这之前(预处理过程)就已经完成了,但也因此难以发现潜在的错误及其它代码维护问题。例如:
#define INT int;
#define TRUE 1;
#define Add(a,b) ((a)+(b));
#define Loop_10 for (int i=0; i<10; i++) {}
3 typedef 和 define 的区别
typedef只是为了增加可读性而为标识符另起的新名称(仅仅只是个别名),而#define原本在C中是为了定义常量,到了C++,const、enum、inline的出现使它也渐渐成为了起别名的工具。有时很容易搞不清楚与typedef两者到底该用哪个好,如#define INT int这样的语句,用typedef一样可以完成。那么问题来了,用哪个好呢?
一般主张用typedef,因为在早期的许多C编译器中这条语句是非法的,只是现今的编译器又做了扩充。为了尽可能地兼容,一般都遵循#define定义“可读”的常量以及一些宏语句的任务,而typedef则常用来定义关键字、冗长的类型的别名。
define宏定义只是简单的字符串代换(原地扩展),而typedef则不是原地扩展,它的新名字具有一定的封装性,以致于新命名的标识符具有更易定义变量的功能。
typedef 和define的区别总结如下:
(1) 两者的执行时间不同
#define是在编译前,也就是在预处理阶段进行,不会进行检查;
而typedef是在编译阶段进行,具有类型检查。
(2) 作用域不同
#define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用。
typedef有自己的作用域。
(3) 对指针的操作不同
#define PCTR char*
typedef char* PTR;
……
const PCTR p; //p可以更改,p指向的内容不能更改,相当于const char *p;或 char const *p。
const PTR p; //p不可更改,p指向的内容可以更改,相当于char *const p;
PTR a,b; //相当于char *a;char *b;a和b都是char型的指针
PCTR a,b; //相当于char *a;char b;只有a是char型的指针,而b是char型的变量。
再举个例子
例如:
typedef (int*) pINT ;
#define pINT2 int* ;
上面两种看似效果相同,实则不同!具体区别如下:
pINT a,b; 的效果同int *a; int *b;表示定义了两个整型指针变量。
而pINT2 a, b;的效果同int *a, b; 表示定义了一个整型指针变量a和整型变量b。
(4) 功能不同
#define 虽然只是简单的替换,但是也可为为类型取别名,还可以定义常量、变量和编译开关等;
typedef用来定义类型的别名,可以定义与平台无关的数据类型,可与struct结合使用。
参考资料
[1] https://blog.csdn.net/baweiyaoji/article/details/53141088
[2] https://blog.csdn.net/boiled_water123/article/details/100184251
[3] https://blog.csdn.net/qq_42214953/article/details/101460797
最后
以上就是复杂睫毛最近收集整理的关于C++ typedef 和define的区别1 typedef 的用法2 define 的用法3 typedef 和 define 的区别参考资料的全部内容,更多相关C++内容请搜索靠谱客的其他文章。
发表评论 取消回复