Alessandro Bonazzi
e075990ed3
Files correlati : Commento : Aggiunto il preprocessore c++ mcpp per sostituire il compilatore nella compilazione delle maschere.
109 lines
3.5 KiB
C
109 lines
3.5 KiB
C
/* n_37.c: Translation limits. */
|
|
|
|
#include "defs.h"
|
|
|
|
/* 37.1: Number of parameters in macro: at least 31. */
|
|
#define glue31(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) \
|
|
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
|
|
|
|
main( void)
|
|
{
|
|
int ABCDEFGHIJKLMNOPQRSTUVWXYZabcde = 31;
|
|
int ABCDEFGHIJKLMNOPQRSTUVWXYZabcd_ = 30;
|
|
int nest = 0;
|
|
|
|
fputs( "started\n", stderr);
|
|
|
|
/* 37.2: Number of arguments in macro call: at least 31. */
|
|
assert(
|
|
glue31( 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)
|
|
== 31);
|
|
|
|
/* 37.3: Significant initial characters in an internal identifier or a
|
|
macro name: at least 31. */
|
|
assert( ABCDEFGHIJKLMNOPQRSTUVWXYZabcd_ == 30);
|
|
|
|
/* 37.4: Nested conditional inclusion: at least 8 levels. */
|
|
nest = 0;
|
|
#ifdef A
|
|
#else
|
|
# ifdef B
|
|
# else
|
|
# ifdef C
|
|
# else
|
|
# ifdef D
|
|
# else
|
|
# ifdef E
|
|
# else
|
|
# ifdef F
|
|
# else
|
|
# ifdef G
|
|
# else
|
|
# ifdef H
|
|
# else
|
|
nest = 8;
|
|
# endif
|
|
# endif
|
|
# endif
|
|
# endif
|
|
# endif
|
|
# endif
|
|
# endif
|
|
#endif
|
|
assert( nest == 8);
|
|
|
|
/* 37.5: Nested source file inclusion: at least 8 levels. */
|
|
nest = 0;
|
|
#include "nest1.h"
|
|
assert( nest == 8);
|
|
|
|
/* 37.6: Parenthesized expression: at least 32 levels. */
|
|
#if 0 + (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 + (27 - (28 + (29 - (30 + (31 - (32 + 0)))))))))) \
|
|
)))))))))))))))))))))) == 0
|
|
nest = 32;
|
|
#endif
|
|
assert( nest == 32);
|
|
|
|
/* 37.7: Characters in a string (after concatenation): at least 509. */
|
|
{
|
|
char * extremely_long_string1 =
|
|
"123456789012345678901234567890123456789012345678901234567890123456789\
|
|
0123456789012345678901234567890123456789012345678901234567890123456789\
|
|
0123456789012345678901234567890123456789012345678901234567890123456789\
|
|
0123456789012345678901234567890123456789012345678901234567890123456789\
|
|
0123456789012345678901234567890123456789012345678901234567890123456789\
|
|
0123456789012345678901234567890123456789012345678901234567890123456789\
|
|
0123456789012345678901234567890123456789012345678901234567890123456789\
|
|
012345678901234567"
|
|
;
|
|
assert( strlen( extremely_long_string1) == 507);
|
|
}
|
|
|
|
/* 37.8: Characters in a logical source line: at least 509. */
|
|
{
|
|
int a123456789012345678901234567890 = 123450; \
|
|
int b123456789012345678901234567890 = 123451; \
|
|
int c123456789012345678901234567890 = 123452; \
|
|
int d123456789012345678901234567890 = 123453; \
|
|
int e123456789012345678901234567890 = 123454; \
|
|
int f123456789012345678901234567890 = 123455; \
|
|
int A123456789012345678901234567890 = 123456; \
|
|
int B123456789012345678901234567890 = 123457; \
|
|
int C123456789012345678901234567890 = 123458; \
|
|
int D1234567890123456789012 = 123459;
|
|
assert( a123456789012345678901234567890 == 123450
|
|
&& D1234567890123456789012 == 123459);
|
|
}
|
|
|
|
/* 37.9: Macro definitions: at least 1024. */
|
|
#include "m1024.h"
|
|
assert( ZX);
|
|
|
|
fputs( "success\n", stderr);
|
|
return 0;
|
|
}
|
|
|