【摘要】:在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去替换,这称为“宏替换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。在C语言中,“宏”分为带参数和不带参数两种。先介绍不带参数宏定义的使用方法。对于有参宏,由于其副作用较大,不推荐使用。前面介绍过的符号常量的定义就是一种无参宏定义。类似的宏定义还有对于已经定义完的宏,还可以在其他宏中使用。
在C语言源程序中,允许用一个标识符来表示一串字符,这称为“宏”(macro)。C语言中用预处理命令#define来定义宏。被定义为“宏”的标识符称为“宏名”,宏名习惯上都用大写字母书写。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去替换,这称为“宏替换”或“宏展开”。一定要注意的是,宏替换的过程是在预处理阶段,而不是在程序运行阶段。
宏定义是由源程序中的宏定义命令完成的。宏替换是由预处理程序自动完成的。
在C语言中,“宏”分为带参数和不带参数两种。先介绍不带参数宏定义(又称为无参宏)的使用方法。对于有参宏,由于其副作用较大,不推荐使用。
无参宏的宏名后不带参数。其定义的一般形式为:
其中,“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。“define”为宏定义命令。“标识符”为所定义的宏名。“一串字符”可以是常数、表达式等。注意此处的一串字符并不一定要加上双引号括上。
前面介绍过的符号常量的定义就是一种无参宏定义。例如:(www.daowen.com)
它的作用是指定标识符OUT_DATA来代替表达式0x0F。在编写源程序时,所有的0x0F都可由OUT_DATA代替,而对源程序作编译时,将先由预处理程序进行宏代换,即用0x0F表达式去置换所有的宏名OUT_DATA,然后再进行编译。
类似的宏定义还有
对于已经定义完的宏,还可以在其他宏中使用。例如:
在使用宏定义时,一定要记住一点,宏定义就是一种程序编译前的替换手段,在编译时就已经替换完成了,运行前就已经固定了。
注意:千万不要把宏名放在赋值号左侧。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。