Ponto de declaração
Um nome é considerado declarado imediatamente após seu declarator, mas antes de seu inicializador (opcional). (Para obter mais informações sobre declaradores, consulte Declaradores.) Um enumerador é considerado declarado imediatamente após o identificador que o nomeia, mas antes de seu inicializador (opcional).
Considere este exemplo:
// point_of_declaration1.cpp
// compile with: /W1
double dVar = 7.0;
int main()
{
double dVar = dVar; // C4700
}
Se o ponto de declaração fosse depois da inicialização, o dVar local seria inicializado como 7.0, o valor da variável global dVar. No entanto, como não é esse o caso, dVar é inicializado como um valor indefinido.
Os enumeradores seguem a mesma regra. No entanto, os enumeradores são exportados para o escopo delimitador da enumeração. No exemplo a seguir, os enumeradores Spades, Clubs, Hearts e Diamonds são declarados. Como os enumeradores são exportados para o escopo delimitador, considera-se que ele tem o escopo global. Os identificadores no exemplo já estão definidos no escopo global.
Considere o código a seguir:
const int Spades = 1, Clubs = 2, Hearts = 3, Diamonds = 4;
enum Suits
{
Spades = Spades, // error
Clubs, // error
Hearts, // error
Diamonds // error
};
Como os identificadores em código acima serão definidos no escopo global, uma mensagem de erro será gerada.
Dica
Usar o mesmo nome para referenciar mais de um elemento de programa — por exemplo, um enumerador de um objeto — é considerada uma prática inadequada de programação e deve ser evitada.No exemplo anterior, essa prática causa um erro.