Поделиться через


Точка объявления

Имя считается объявленным сразу после его декларатора, но перед его (необязательным) инициализатором. (Дополнительные сведения о деклараторах см. в разделе Деклараторы.) Перечислитель считается объявленным сразу после идентификатора, который его именует, но перед его (необязательным) инициализатором.

Рассмотрим следующий пример.

// point_of_declaration1.cpp
// compile with: /W1 
double dVar = 7.0;
int main()
{
   double dVar = dVar;   // C4700
}

Если бы точка объявления располагалась после инициализации, то локальная переменная dVar инициализировалась бы значением 7,0 — значением глобальной переменной dVar. Поскольку это не так, dVar инициализируется неопределенным значением.

Для перечислителей действует то же правило. Однако перечислители экспортируются во внешнюю область видимости перечисления. В следующем примере объявляются перечислители Spades, Clubs, Hearts и Diamonds. Поскольку перечислители экспортируются во внешнюю область видимости, считается, что они имеют глобальную область видимости. Идентификаторы в примере уже определены в глобальной области видимости.

Рассмотрим следующий код.

const int Spades = 1, Clubs = 2, Hearts = 3, Diamonds = 4;
enum Suits
{
    Spades = Spades,     // error
    Clubs,               // error
    Hearts,              // error
    Diamonds             // error
};

Поскольку идентификаторы в предыдущем коде уже определены в глобальной области видимости, выдается сообщение об ошибке.

Примечание

Использование одного и того же имени для ссылки на несколько элементов программы, например перечислитель и объект, считается плохим стилем программирования, который следует избегать.В предыдущем примере такое поведение приводит к ошибке.

См. также

Ссылки

Область