typedef 与#define 的概念及区别?

文章目录

  • 一、typedef
  • 二、#define
  • 三、typedef 与#define 的区别?
  • 总结


一、typedef

typedef 的全称 type define 即类型定义,其目的就是对既有的类型另外再命名一个新的名字。新的名字与既有的名字都可使用。这样做的目的主要是让代码的可阅读性更强些。

typedef char BYTE;
BYTE kb[1024];

指针变量需要在类型描述基础上把变量名放置在*后面。很多时候阅读起来比较麻烦,比较好的办法是把类型的描述过程用 typedef 封装起来。

用 typedef 关键字,然后把原指针变量名的位置用约定俗成的大写字母的类型名替换掉就完成了扩展指针类型的“封装”。之后就可以用 PFUN、P5INT 这样的类型名创建函数指针与数组指针了

用 typedef 封装后可以增强代码的可读性,也会降低指针的使用难度

typedef 可以嵌套定义

二、#define

#define 称为宏替换简称宏,其作用相当于查找并替换,即按预定义好的宏名称进行查找,并把符合的源代码部位替换成对应的文字内容。

其基本格式为:#define 宏名 替换内容

#define MAX 100;//注意此处的分号
int main()
{
	int a[MAX];
	return 0;
}

注意:宏名与替换内容之间最好一个空格,另外替换内容后面不要随意加分号,因为分号也将作为替换内容的一部分去参与替换。

宏替换也可以嵌套定义

有参数的宏是指在替换时并不是整体替换,而是局部替换。即把变化的部位命名为一个参数名。

虽然用起来感觉像一个函数,但它本质是个宏。所以在使用时注意宏的格式:宏 替换内容,如果是有参数的宏,那么宏名称与(参数)之间不要有空格。一旦宏名与括号之间有空格,那么()就变成了替换内容而非参数的作用了。

三、typedef 与#define 的区别?

#define 宏工作的时期是预处理期,即编译之前。它的作用是把源代码变形替换成另一个源代码。这个任务完成后#define 也就不存在了。所以 PINT变为 int后只有 a 变量是指针类型,其它的都是 int 类型变量。而 typedef 是要参加编译的,编译后其命名的数据类型 P_INT 一直可被项目所使用。所以 p,q,k 都是 int指针类型。

另外两者的使用侧重不同。typedef 的目的是简化数据类型,可以把复杂的类型进
行封装。而#define 目的是增强代码的维护性、可读性;从而辅助开发者对一些代码的
查找替换。

#define PINT int*
typedef int* P_INT;
int main()
{
	PINT a, b, c;
	P_INT p, q, k;
	return 0;
}

总结

在C语言编程中,typedef和#define是常用的能够定义别名的语句。

你可能感兴趣的:(C与C++,c++,c语言,学习,程序人生)