title: Typedefs, tagged and untagged structures, and incompatible pointer types
body: <p>Consider the following C code snippet:</p>
  
  <pre><code>typedef struct node{
      int val;
      struct node* left;
      struct node* right;
  }node;
  
  void inorderTraversal(node *p){
      inorderTraversal(p-&gt;left);
      printf("%d",p-&gt;val);
      inorderTraversal(p-&gt;right);
  }
  </code></pre>
  
  <p>If I write only <code>typedef struct</code> instead of <code>typedef struct node</code>, I get a warning saying "passing argument of incompatible pointer type" when I call <code>inorderTraversal(root)</code> in <code>main()</code>. Why do I get this warning even though the program doesn't show any error?</p>