C/C++编程笔记:浅析 C 语言中宏定义的使用,知识点全解( 三 )

#define宏名(参数表)宏体

例如:#defineAREAR(R)3.14*R*R

#define SUM(X , Y) X+Y

两种格式的宏定义必须写在函数的外边 , 其作用域为宏定义命令起到源程序结束 , 若要终止其作用域可以用#undef命令加宏名 , 宏定义也允许嵌套 , 在宏定义的字符串中可以使用已经定义的宏名 。

二、宏展开及宏调用

(一)宏展开及调用的概念

编译预处理时程序中出现的所有宏名都要有宏定义中的字符串来代换 , 称为宏展开 。 嵌套的宏定义 , 展开时要层层展开 。 程序中字符串内的字符跟宏名相同时作为一般字符处理 , 不用宏展开 。 对于带参数的宏的使用称为宏调用 , 一般形式为:宏名(实参表);在调用中 , 不仅要宏展开 , 而且要用实参去代换形参 。

C语言源程序的处理过程 , 经历了编辑、预处理、编译、连接几个过程 。 其中预处理产生编译的输入 , 源文件中若有宏命令 , 则预处理器将其展开成相应的宏定义 , 这个阶段的工作只是纯粹的替换展开 , 没进行任何的计算 。 同时现有的编译系统没有提供独立的预处理系统进行预处理 , 所以我们看不到预处理后的代码 , 在编译时可能会出现错误 , 但是系统检测不出来 。 所以在宏展开时我们一定要谨慎 。

推荐阅读