/* Conformance Test 4.5.3.3: Verfication of local array declarations: arrays */ /* of pointers */ #include int printf(const char *, ...); int main (void) { int i, j, k, n; /* loop indices */ long L; /* l-values */ float f; double d; extended e; comp cmp; unsigned int ui; unsigned long ul; char ch; int *i1 [50]; /* all basic types */ long *L1 [9]; comp *c1 [3]; char *ch1 [10]; float *f1 [3]; double *d1 [8]; extended *e1 [9]; unsigned int ui3 [4] [5] [1], *ui1 [7]; unsigned long ul2 [5] [3], *ul1 [1]; /* conglomerate types */ struct s { int a; float f; } *s1 [10], S; enum colors { red, black, green } *en [6], C; union longOrShort { int first; long second; } *u1 [12], U; for (i = 0; i < 10; i++) /* assign & check singly-dimensioned */ ch1 [i] = &ch; /* array of pointers to character */ ch = 'z'; for (i = 9; i >= 0; i--) if (*(ch1 [i]) != 'z') goto Fail; for (i = 0; i < 50; i++) /* assign & check singly-dimensioned */ i1 [i] = &n; /* array of pointers to int */ n = 32767; for (i = 49; i >= 0; i--) if (*(i1 [i]) != 32767) goto Fail; for (i = 8; i >= 0; i--) /* assign & check singly-dimensioned */ L1 [i] = &L; /* array of pointers to long int */ L = 2147483647; for (i = 0; i < 9; i++) if (*(L1 [i]) != 2147483647) goto Fail; for (i = 0; i < 7; i++) /* assign & check singly-dimensioned */ ui1 [i] = &ui; /* array of ptrs to unsigned int */ ui = 65535; for (i = 6; i >= 0; i--) if (*(ui1 [i]) != 65535) goto Fail; ul1 [0] = &ul; /* assign & check singly-dimensioned */ ul = 4294967295ul; /* array of ptrs to long unsigned int*/ if (*(ul1 [0]) != 0xffffffff) goto Fail; for (i = 0; i < 3; i++) /* assign & check singly-dimensioned */ c1 [i] = &cmp; /* array of pointers to comp */ cmp = 4; for (j = 2; j >= 0; j--) if (*(c1 [j]) != 4) goto Fail; f1 [0] = f1 [1] = f1 [2] = &f; /* assign & check singly-dimensioned */ f = 32.8; /* array of pointers to float */ for (k = 0; k < 3; k++) if (fabs(*(f1 [k]) - 32.8) > 0.00001) goto Fail; for (i = 0; i < 8; i++) /* assign & check singly- */ d1 [i] = &d; /* dimensioned array of */ d = 123.0e50; /* pointers to double */ for (k = 7; k >= 0; k--) if (fabs(*(d1 [k]) - (double)0.123E53) > 0.00001) goto Fail; for (k = 8; k >= 0; k--) /* assign & check singly-dimensioned */ e1 [k] = &e; /* array of pointers to extended */ e = 0.0e-300; for (i = 0; i < 9; i++) if (*(e1 [i]) != 0) goto Fail; for (i = 0; i < 10; i++) /* assign & check singly-dimensioned */ s1 [i] = &S; /* array of pointers to structures */ S.a = 7; S.f = 6.4; for (i = 9; i >= 0; i--) if ((s1 [i]->a != 7) || (fabs(s1 [i]->f - 6.4) > 0.00001)) goto Fail; for (n = 5; n >= 0; n--) /* assign & check singly-dimensioned */ en [n] = &C; /* array of pointers to enumerations*/ C = black; for (k = 0; k < 6; k++) if (*(en [k]) != 1) goto Fail; for (i = 0; i < 12; i++) /* assign & check singly-dimensioned */ u1 [i] = &U; /* array of pointers to union */ U.first = -45; for (k = 11; k >= 0; k--) if (u1 [k]->first != -45) goto Fail; U.second = 32770; for (n = 11; n >= 0; n--) if (u1 [n]->second != 32770) goto Fail; printf ("Passed Conformance Test 4.5.3.3\n"); return 0; Fail: printf ("Failed Conformance Test 4.5.3.3\n"); }