/* Conformance Test 3.3.2.1: Verification of macros with parameters */ int printf(const char *, ...); #define subtract(x,y) x - y #define noParmsPass() printf ("Passed Conformance Test 3.3.2.1\n"); #define noParmsFail() printf ("Failed Conformance Test 3.3.2.1\n"); #define many_parms(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) \ a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x+y+z #define real float int main (void) { double f1(), g1(); int i; long j; real x, y; i = subtract (3, 5); if (i != -2) goto Fail; x = 3.5e4; y = 2.8e0; j = subtract (((long) f1(x)), ((int) g1(y))); if (j != 69995) goto Fail; i = many_parms (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26); if (i != 351) goto Fail; noParmsPass () return 0; Fail: noParmsFail () } /**************************************************************************/ double f1 ( y ) real y; { return (y * 2.0); } /**************************************************************************/ double g1 ( x ) real x; { return (x / 0.5e+0); }