3.8 宏定义

在C语言中,可以使用宏定义将一个一段代码等效成另一段代码。源代码中的宏定义在编译之前,就会由编译器首先替换成实际等效的代码,之后源代码才会经过编译和链接,最终生成目标文件。使用宏定义,可以简化代码并增强代码的可读性。例如可以将圆周率3.1415926定义成一个代码PI,这样在程序中可以使用PI作为圆周率。表3-40中给出了对圆周率进行宏定义并用来计算圆的面积的示例代码。

表3-40 应用宏定义的代码示例

宏定义中还可以使用参数,从而具备类似于C语言的函数一样的功能。同样,这些相应的宏定义也是在编译之前被替换为实际的代码的。计算圆的面积的宏定义和示例代码如表3-41所示,其中参数x就是圆的半径,编译器会在编译代码之前,首先将第6行代码替换为“float area = (3.14*(r)*(r)); ”。此外,在第2行的宏定义中,之所以在表达式中将每个x放在小括号中,是为了避免出现优先级错误。例如,在宏定义中未将参数放在小括号中,即定义A(x)为3.14*x*x,则A(3 + 2)会变为3.14*3 + 2*3 + 2,而不是3.14*(3 + 2)*(3 + 2)。

表3-41 利用宏定义求取圆面积的示例代码

宏定义还可以使用多个参数,不同参数之间用逗号隔开即可。例如可以设计一个限制变量最大值和最小值的宏,定义为LIMIT(a,minVal, maxVal),则其示例代码如表3-42所示。宏定义中,每个参数也都放置在一对小括号内。该宏定义可以用来限制变量的数值。

表3-42 利用宏实现限幅功能的代码示例