title: Is an empty initializer list valid C code?
body: <p>It is common to use <code>{0}</code> to initialize a <code>struct</code> or an <code>array</code> but consider the case when the first field isn't a scalar type. If the first field of <code>struct Person</code> is another <code>struct</code> or array, then this line will result in an error (<code>error: missing braces around initializer</code>).</p>
  
  <pre><code>struct Person person = {0};
  </code></pre>
  
  <p>At least GCC allows me to use an empty initializer list to accomplish the same thing</p>
  
  <pre><code>struct Person person = {};
  </code></pre>
  
  <p>But is this valid C code?</p>
  
  <p>Also: Is this line guaranteed to give the same behavior, i.e. a zero-initialized <code>struct</code>?</p>
  
  <pre><code>struct Person person;
  </code></pre>