The first is often used in C so that you can refer to the struct without having to prefix the name with "struct". I don't think the second is legal. The third is used when you don't care about/mind putting "struct" in front of the name of the structure or in C++, where it automatically makes a typedef for you.