Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
deklaracja "identifier" ukrywa deklarację globalną
Uwagi
Deklaracja identyfikatora w zakresie lokalnym ukrywa deklarację identycznie nazwanego identyfikatora w zakresie globalnym. To ostrzeżenie informuje o tym, że odwołania do identyfikatora w tym zakresie rozpoznają lokalnie zadeklarowaną wersję, a nie wersję globalną, która może być twoją intencją. Ogólnie rzecz biorąc, zalecamy zminimalizowanie użycia zmiennych globalnych jako dobrej praktyki inżynieryjnej. Aby zminimalizować zanieczyszczenie globalnej przestrzeni nazw, zalecamy użycie nazwanej przestrzeni nazw dla zmiennych globalnych.
To ostrzeżenie było nowe w programie Visual Studio 2015 w kompilatorze Microsoft C++ w wersji 18.00. Aby pominąć ostrzeżenia z tej wersji kompilatora lub nowszej podczas migrowania kodu, użyj opcji /Wv:18 kompilatora.
Przykład
Poniższy przykład generuje 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;
}
Jednym ze sposobów rozwiązania tego problemu jest utworzenie przestrzeni nazw dla globalnych, ale nie użycie using dyrektywy w celu przeniesienia tej przestrzeni nazw do zakresu, więc wszystkie odwołania muszą używać jednoznacznych nazw kwalifikowanych:
// 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;
}