background image

 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 宏名(形参表) 字符串

  在字符串中含有各个形参。

  带参数宏调用的一般形式为: