title: Empty array with empty initializer
body: <p>How am I to understand this:</p>
  
  <pre><code>void Func(double* P, long L) {}
  int main(void) {
      double pert[] = {};
      Func(pert, sizeof(pert)/sizeof(pert[0]));
  }
  </code></pre>
  
  <p>My compiler complains:   error: use of GNU empty initializer extension. gcc and Clang can compile and run it fine. How is that syntax different from <code>double pert[]</code>; or <code>double *pert</code>;</p>
  
  <p>In this example, <code>per</code>t doesn't even have a [0], so how can <code>pert[0]</code> make sense? Yeah, I guess It's the same as <code>sizeof(double)</code>.</p>
  
  <p>In particular, the code I'm analyzing uses a lot of <code>sizeof</code> on arrays, so I don't want to change <code>[]</code> to <code>*</code> needlessly;  </p>