Initializers for multi-dimensional arrays

Doug Schmidt schmidt at ics.uci.edu
Wed Jun 7 17:16:41 AEST 1989


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 at 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



More information about the Comp.lang.c mailing list