title: gcc compiler report warning but a.out works smoothly otherwise
body: <p>I am following the book "C Primer Plus" and encounter such a snippet of code:</p>
  
  <pre><code>// designate.c -- use designated initializers
  #include &lt;stdio.h&gt;
  #define MONTHS 12
  int main(void) 
  {
      int days[MONTHS] = {31, 28, [4] = 31, 30, 31, [1] = 29};
      int i;
  
      for (i = 0; i &lt; MONTHS; i++)
          printf("%2d %d\n", i+1, days[i]);
  
      return 0;
  }
  </code></pre>
  
  <p>It reports errors when I compiled it:</p>
  
  <pre><code>$ cc designate.c
  designate.c:6:57: warning: initializer overrides prior initialization of this subobject [-Winitializer-overrides]
      int days[MONTHS] = {31, 28, [4] = 31, 30, 31, [1] = 29};
                                                          ^~
  designate.c:6:29: note: previous initialization is here
      int days[MONTHS] = {31, 28, [4] = 31, 30, 31, [1] = 29};
                              ^~
  1 warning generated.
  </code></pre>
  
  <p>Nonetheless, <code>./a.out</code> works properly.</p>
  
  <pre><code>$ ./a.out
   1 31
   2 29
   3 0
   4 0
   5 31
   6 30
   7 31
   8 0
   9 0
  10 0
  11 0
  12 0
  </code></pre>
  
  <p>I am very confused here about what should I learn from the error report?</p>