title: What's the syntactically proper way to declare a C struct?
body: <p>I've seen C structs declared several different ways before. Why is that and what, if anything, does each do different?</p>
  
  <p>For example:</p>
  
  <pre><code>struct foo {
    short a;
    int b;
    float c;
  };
  
  typedef struct {
    short d;
    int e;
    float f;
  } bar;
  
  typedef struct _baz {
    short a;
    int b;
    float c;
  } baz;
  
  int main (int argc, char const *argv[])
  {
    struct foo a;
    bar b;
    baz c;
  
    return 0;
  }
  </code></pre>