Позвольте мне сначала показать пример (это строго для понимания цели, не пишите такой код, ever )
#include <stdio.h>
int main(void)
{
int here = 0; //.......................ordinary identifier
struct here { //.......................structure tag
int here; //.......................member of a structure
} there;
here: //......... a label name
here++;
printf("Inside here\n");
there.here = here; //...........no conflict, both are in separate namespace
if (here > 2) {
return 0;
}
else
goto here; //......... a label name
printf("Hello, world!\n"); // control does not reach here..intentionally :)
return 0;
}
Вы видите использованиеидентификатор here
.Они принадлежат отдельным пространствам имен в соответствии с правилом, поэтому с этой программой все в порядке.
Однако, скажем, например, вы изменили имя структурной переменной с there
на here
, и выВы увидите конфликт, поскольку тогда в одном и том же пространстве имен будут два отдельных объявления одного и того же идентификатора (обычного идентификатора).