Espaços de nome
O compilador configura "espaços de nome" para distinguir entre os identificadores utilizados para diferentes tipos de itens.Os nomes de cada espaço para nome devem ser exclusivos para evitar o conflito, mas um nome idêntico pode aparecer em mais de um espaço para nome.Isso significa que você pode usar o mesmo identificador para dois ou mais itens diferentes, desde que os itens são nos espaços para nome diferente.O compilador pode resolver referências baseadas no contexto sintático do identificador no programa.
Observação |
---|
Não confunda a noção c limitada de um espaço para nome com o recurso de "namespace" de C++.Consulte Namespaces na c+ + referência de linguagem para obter mais informações. |
Esta lista descreve os espaços de nome usados em c.
Rótulos de instrução
Rótulos de instrução nomeado fazem parte das instruções.Definições de etiquetas de instrução são sempre seguidas de dois-pontos, mas o são não faz parte do case rótulos.Usos de rótulos de instrução sempre seguem imediatamente a palavra-chave goto.Rótulos de instrução não é necessário ser diferente a partir de outros nomes ou nomes com rótulo de outras funções.Marcas de estrutura, união e enumeração
Essas marcas são parte da estrutura, união e enumeração especificadores de tipo e, se estiver presente, siga sempre imediatamente as palavras reservadas struct, união, ou enum.Os nomes de marca devem ser distintos de todos os outros estrutura, enumeração ou marcas de união com a mesma visibilidade.Membros do estruturas ou uniões
Nomes de membros são alocados em espaços para nome associados a cada estrutura e o tipo de união.Ou seja, o mesmo identificador pode ser um nome de componente em qualquer número de estruturas ou uniões ao mesmo tempo.Definições dos nomes de componente sempre ocorrem dentro da estrutura ou especificadores de tipo de união.Usos de nomes de componente sempre seguem imediatamente os operadores de seleção de membro (– > e .).O nome de um membro deve ser exclusivo dentro da estrutura ou união, mas ele não precisa ser diferenciadas das demais nomes no programa, incluindo os nomes dos membros de diferentes estruturas e uniões, ou o nome da estrutura em si.Identificadores comuns
Todos os outros nomes se encaixam em um espaço para nome que inclua variáveis, funções (incluindo parâmetros formais e variáveis locais) e constantes de enumeração.Nomes de identificador tem aninhados visibilidade, portanto, você pode redefini-los dentro de blocos.Nomes de TypeDef
Nomes de TypeDef não podem ser usados como identificadores no mesmo escopo.
Por exemplo, já que as marcas de estrutura, os membros de estrutura e nomes de variáveis nos três espaços de nome diferente, os três itens chamado student neste exemplo não entrem em conflito.O contexto de cada item permite que a interpretação correta de cada ocorrência de student no programa.(Para obter informações sobre estruturas, consulte Declarações de estrutura.)
struct student {
char student[20];
int class;
int id;
} student;
Quando student aparece após a struct a palavra-chave, o compilador reconhece como uma marca de estrutura.Quando student aparece após um operador de seleção de membro (– > ou .), o nome refere-se ao membro da estrutura.Em outros contextos, student refere-se a variável de estrutura.No entanto, não é recomendável sobrecarregar o espaço de nome de marca desde que ele obscurece o significado.