Partilhar via


Espaços de nome

O compilador configura "espaços de nome" para distinguir entre os identificadores usados para diferentes tipos de itens. Os nomes dentro de cada espaço de nome devem ser exclusivos para evitar conflitos, mas um nome idêntico pode aparecer em mais de um espaço de nome. Isso significa que você pode usar o mesmo identificador para dois ou mais itens diferentes, desde que os itens estejam em espaços de nome diferentes. O compilador pode resolver referências com base no contexto sintático do identificador no programa.

Observação

Não confunda a noção C limitada de um espaço de nome com o recurso "namespace" C++. Consulte Namespaces na Referência de linguagem C++ para obter mais informações.

Esta lista descreve os espaços de nome usados em C.

Rótulos de declaração
Os rótulos de instrução nomeados fazem parte das instruções. As definições de rótulos de declaração são sempre seguidas por dois pontos, mas não fazem parte dos case rótulos. As utilizações de etiquetas de declaração seguem sempre imediatamente a palavra-chave goto. Os rótulos de instrução não precisam ser distintos de outros nomes ou de nomes de rótulos em outras funções.

Tags de estrutura, união e enumeração
Essas tags fazem parte de especificadores de tipo de estrutura, união e enumeração e, se presentes, sempre seguem imediatamente as palavras structreservadas , unionou enum. Os nomes das tags devem ser distintos de todas as outras tags de estrutura, enumeração ou união com a mesma visibilidade.

Membros de estruturas ou sindicatos
Os nomes dos membros são alocados em espaços de nome associados a cada estrutura e 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. As definições de nomes de componentes sempre ocorrem dentro de especificadores de tipo de estrutura ou união. Os usos de nomes de componentes sempre seguem imediatamente os operadores de seleção de membros (-> e .). O nome de um membro deve ser único dentro da estrutura ou sindicato, mas não precisa ser distinto de outros nomes no programa, incluindo os nomes de membros de diferentes estruturas e sindicatos, ou o nome da própria estrutura.

Identificadores ordinários
Todos os outros nomes caem em um espaço de nome que inclui variáveis, funções (incluindo parâmetros formais e variáveis locais) e constantes de enumeração. Os nomes dos identificadores têm visibilidade aninhada, para que você possa redefini-los dentro dos blocos.

Nomes Typedef
Os nomes Typedef não podem ser usados como identificadores no mesmo escopo.

Por exemplo, como marcas de estrutura, membros de estrutura e nomes de variáveis estão em três espaços de nome diferentes, os três itens nomeados student neste exemplo não entram em conflito. O contexto de cada item permite a interpretação correta de cada ocorrência no student 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 palavra-chave, o compilador a reconhece como uma marca de estrutura. Quando student aparece depois de um operador de seleção de membros (-> ou .), o nome refere-se ao membro da estrutura. Em outros contextos, student refere-se à variável estrutura. No entanto, sobrecarregar o espaço do nome da tag não é recomendado, pois obscurece o significado.

Ver também

Estrutura do Programa