Path: utzoo!utgpu!jarvis.csri.toronto.edu!rutgers!cs.utexas.edu!csd4.milw.wisc.edu!indri!polyslo!usc!orion.cf.uci.edu!uci-ics!schmidt From: schmidt@ics.uci.edu (Doug Schmidt) Newsgroups: comp.lang.c Subject: Initializers for multi-dimensional arrays Message-ID: <16984@paris.ics.uci.edu> Date: 7 Jun 89 07:16:41 GMT Sender: news@paris.ics.uci.edu Reply-To: Doug Schmidt Organization: University of California at Irvine: ICS Dept. Lines: 59 Hi, I've got a quick C question. The following program gives different results depending on whether it is compiled with GCC 1.35 or Sun OS 4.0.1's cc compiler (if -DFIXBUG is defined when compiling they produce the same result). The only difference is the absence of surrounding '{' '}' to demarcate each row in the initializer for the two dimensional array `bar.' Can someone please tell me which version is *correct* w.r.t. 1. The latest ANSI-C draft. 2. Traditional behavior on UNIX compilers. thanks very much, Doug ---------------------------------------- typedef struct { int i; int j; } bar; #ifndef FIXBUG static bar foo[4][4] = { {1,0}, {2,0}, {3,0}, {4,0}, {5,0}, {6,0}, {7,0}, {8,0}, {9,0}, {10,0}, {11,0}, {12,0}, {13,0}, {14,0}, {15,0}, {16,0}, }; #else static bar foo[4][4] = { /* Note the extra { } for each row... */ { {1,0}, {2,0}, {3,0}, {4,0},}, { {5,0}, {6,0}, {7,0}, {8,0},}, { {9,0}, {10,0}, {11,0}, {12,0},}, {{13,0}, {14,0}, {15,0}, {16,0},}, }; #endif main () { int i,j; for (i = 0;i < 4; i++) { for (j = 0; j < 4; j++) printf ("%4d", foo[i][j].i); printf ("\n"); } } -- Any man's death diminishes me, | schmidt@ics.uci.edu (ARPA) Because I am involved in Mankind; | office: (714) 856-4043 And therefore never send to know for whom the bell tolls; It tolls for thee -- John Donne