Предупреждение компилятора (уровень 4) C4459
Объявление идентификатора скрывает глобальное объявление
Объявление идентификатора в локальном область скрывает объявление одинаково именованного идентификатора в глобальных область. Это предупреждение позволяет узнать, что ссылки на идентификатор в этом область разрешаются локально объявленной версии, а не глобальной версии, которая может быть вашим намерением. Как правило, мы рекомендуем свести к минимуму использование глобальных переменных в качестве хорошей инженерной практики. Чтобы минимизировать загрязнение глобального пространства имен, рекомендуется использовать именованное пространство имен для глобальных переменных.
Это предупреждение было новым в Visual Studio 2015 в компиляторе Microsoft C++ версии 18.00. Чтобы отключить предупреждения от этой версии компилятора или более поздней при переносе кода, используйте параметр компилятора /Wv:18 .
Пример
Следующий пример приводит к возникновению ошибки C4459:
// C4459_hide.cpp
// compile with: cl /W4 /EHsc C4459_hide.cpp
int global_or_local = 1;
int main() {
int global_or_local; // warning C4459
global_or_local = 2;
}
Одним из способов устранения этой проблемы является создание пространства имен для глобальных объектов, но не использование using
директивы для приведения этого пространства имен в область, поэтому все ссылки должны использовать однозначные полные имена:
// C4459_namespace.cpp
// compile with: cl /W4 /EHsc C4459_namespace.cpp
namespace globals {
int global_or_local = 1;
}
int main() {
int global_or_local; // OK
global_or_local = 2;
globals::global_or_local = 3;
}
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по