Syntax: typedef and struct tag explanation
<p>In following example:</p>

<pre><code>typedef struct Books {
    char title[50];
    char author[50];
    int book_id;
} Book;
</code></pre>

<p>The <code>Book</code> can be used then, to declare variable, like:</p>

<pre><code>Book myBook;
</code></pre>

<p>But what the meaning of <code>Books</code>? How it can be used, or why we need it?
I interested mostly in plain C, but if you can explain about C++ as well it will be great.</p>

<p>--edited--</p>

<p>To be more specific, what the difference between code above and following code:</p>

<pre><code>typedef struct {
    char title[50];
    char author[50];
    int book_id;
} Book;
</code></pre>

<p>Why we ever need an extra literal in first example?</p>

<p>Found good explanation here:
<a href="http://www.embedded.com/electronics-blogs/programming-pointers/4024450/Tag-vs-Type-Names" rel="nofollow">Tag vs. Type Names in C and C++</a></p>