Peut-on nommer une variable du même nom qu’une balise de structure?

Peut-on nommer une variable du même nom qu’une balise de structure? Par exemple:

struct sth { char *a; int b; }; struct asdf { struct sth sth; // is second sth OK?? }; 

Les balises de structure se trouvent dans l’espace de nom «balise», partagé avec les unions et les énumérations. Cet espace est totalement distinct de l’espace de noms ‘identificateur ordinaire’ (contenant les noms typedef et les noms de variables et noms de fonctions), ainsi que de l’espace de noms des noms de membres par structure.

Cela signifie que vous pourriez avoir:

 struct sth // DO { // NOT int sth; // DO } sth; // THIS! 

Ceci déclare une variable de structure sth de type struct sth avec un membre nommé sth .

Le compilateur peut garder tout ça bien droit; vous ne pouvez probablement pas et ne devriez probablement pas. En d’autres termes, bien que vous puissiez écrire du code de cette façon, ce serait une très mauvaise idée de le faire.