float r = 1.0;
float area = PI*r*r;
printf("The area of the circle is %f",area);
return 0;
}
再举一个使用无参数宏替代字符串的例子:
#define M (y*y+3*y)
#include <stdio.h>
int main()
{
int s,y;
printf("input a number: ");
scanf("%d",&y);
s = 3*M + 4*M + 5*M;
printf("s=%d\n",s);
return 0;
}
# define M (y*y+3*y) 定义 M 表达式(y*y+3*y)。在编写源程序时,所有的(y*y+3*y)都可由
M
代替,而对源程序作编译时,将先由预处理程序进行宏代换,即用 (y*y+3*y)表达式去
置换所有的宏名 M,然后再进行编译。
上例程序中首先进行宏定义,定义 M 表达式(y*y+3*y),在 s= 3*M+4*M+5* M 中作了宏调
用。在预处理时经宏展开后该语句变为:s=3*(y*y+3*y)+4* (y*y+3*y)+5* (y*y+3*y);但要注
意的是,在宏定义中表达式(y*y+3*y)两边的括号不能少。否则会发生错误。
带参数宏定义
C 语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实
际参数。对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。
带参数宏定义的一般形式为:
#define 宏名(形参表) 字符串
在字符串中含有各个形参。
带参数宏调用的一般形式为: