例9.4
#definePI3.1415926
#define CIRCLE(r,l,s,v)L=2*PI*R;S=PI*R*R;V=4.0/3.0*PI*R*R*R
main()
{float r,l,s,v;
scanf("%f",&r);
CIRCLE(r,l,S,v);
  printf("r=%6.2f,l=%6.2f,S=%6.2f,v=%6.2f\n",r,l,S,v);
   }
经预编译宏展开后的程序如下:
main()
 {float r,l,S,v;
  scanf("%f",&r);
  l=2*3.1415926r;S=3.14159*r*r;v=4.0/3.0*3.1415926*r*r*r;
 printf("r=%6.2f,l=%6.2f,S=%6.2f,v=%6.2f\n",r,l,S,v);
  }
运行情况如下:
3.5
r= 3.50,l= 21.99,S= 38.48,v= 179.59
请注意,实参r的值已知,可以从宏带回3个值(l,S,v)。其实,只不过是字符代替而已,将字符r代替R,l代替L,S代替S,v代替V,而并未在宏展开时求出l、S、v的值。