有三种宏表达式:文本表达式、逻辑表达式和算术表达式。文本表达式是任何文本、宏变量、宏函数或宏调用的组合,通常产生文本。
简介宏表达式一般分为3种,文本、逻辑和算术表达式。
文本表达式就是文本、宏变量、宏函数、宏调用的任意组合。文本表达式能够被宏处理器解析从而生成文本。如&test,%macr01,%eval(1+2)等。
宏逻辑表达式和宏算术表达式就是一系列的算符和组件的组合,并且可以生成一个结果。算术表达式包含算术算符,逻辑表达式包含逻辑算符。
算术和逻辑表达式中的组件是文本,但是一个表示数字的组件可以在表达式被解析的时候被暂时地转换成一个数值并进行相应的数值计算。14.5.1 宏处理器如何处理算术表达式默认的来说,宏处理器使用整数算法对数值进行计算,这时默认只有整数和十六进制。
带参数宏表达式的应用宏定义也可用来定义多个表达式,在宏调用时进行表达式的替换。请看下面的例子。
带参数宏表达式应用
#include
#define ABC(v.W,m) v=x+y;W=x*z;m=x+Y+z; /*带参数宏表达式定义*/
main()
{
int x=2,Y=3,z=4,w,ww,mm; /*定义了几个整型变量*/
ABC(¨vv,ww,mm); /*带参数宏定义调用*/
printf("vv=%d\n ww=%d\n mm=%d\n",vv,ww,mm );/*屏幕显示输出*/
}
形式宏表达式可以取如下形式之一:
1.[+[一]运算对象[{+|-|/|*}运算对象]
2.运算对象||运算对象[||运算对象]…
单独在形式1中出现的运算对象或单独在形式2中出现的运算对象可以是允许的运算对象中的任意一个.与符号或算术算符一起使用的运算对象必须是十进整数或定点宏变量.形式2的表达式可以包含从整型到字符型的转换,这个转换按照表式传送规则来完成.
宏表达式细分为定点表达式和字符表达式.包含没有赋值的宏变量的宏表达式是错误的.用完全跟执行时表达式一样的办法对宏表达式求值.1
本词条内容贡献者为:
宋春霖 - 副教授 - 江南大学