【C语言】typedef(自定义数据类型)与#define(宏定义)用法比较

  不管是在C语言还是在C++中,typedef这个词都不少见,当然出现频率较高的还是在C代码中。typedef和#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了。

     1.宏定义(#define)

     宏定义又称为宏代换、宏替换,简称“宏”。

     格式:#define 标识符 字符串

     其中的标识符就是所谓的符号常量,也成为“宏名”。

     预处理(预编译)工作也叫作宏展开:将宏名替换为字符串。掌握“宏”概念的关键是“换”,一切以换为前提。

      2.自定义数据类型(typedef)

     定义一种类型的别名,而不只是简单的宏替换。可以用typedef可以解决同时声明多个指针型变量的问题。

     请看下面的例子:

​​#define INT1 int
typedef int INT2;

#define PINT int *
typedef int * SINT;​​

     从形式上看它们相似,但在实际使用中却不相同。

     下面分别用INT1,INT2,PINT,SINT定义变量就可以看出它们的区别:

INT1 a,b;
INT2 c,d;
PINT e,f;
SINT g,h;

     在经过宏替换后变为:

int a,b;
INT2 c,d;
int * e,f;
SINT g,h;

     在上面的变量中,变量a和b为整型变量,变量c和d也为整型变量;在这里我们看不出宏定义和数据类型定义的区别。而变量e为整型指针变量,变量f为整型变量;变量g和h则均为整型指针变量,因为SINT是一个类型说明符。由这个例子可见,宏定义虽然也可表示数据类型,但毕竟是作为字符替换。在使用时要分外小心,以避出错。

     

猜你喜欢

转载自blog.csdn.net/PinkBananA_/article/details/82807311