Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
az "azonosító" deklaráció elrejti a globális deklarációt
Megjegyzések
A helyi hatókörben lévő azonosító deklarációja elrejti az azonos nevű azonosító deklarációját a globális hatókörben. Ez a figyelmeztetés tájékoztatja arról, hogy a hatókörben szereplő azonosítóra való hivatkozások a helyileg deklarált verzióra, nem pedig a globális verzióra kerülnek, ami lehet, hogy nem az Ön szándéka. Általában azt javasoljuk, hogy minimálisra csökkentse a globális változók használatát jó mérnöki gyakorlatként. A globális névtér szennyezésének minimalizálása érdekében javasoljuk, hogy használjon elnevezett névteret a globális változókhoz.
Ez a figyelmeztetés a Visual Studio 2015 18.00-s verziójában, a Microsoft C++ fordítóban volt újdonság. A kód áttelepítése során a /Wv:18 fordítóbeállítással letilthatja a fordító ezen verziójával vagy újabb verziójával kapcsolatos figyelmeztetéseket.
Example
Az alábbi példa C4459-et hoz létre:
// 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;
}
A probléma megoldásának egyik módja, ha létrehoz egy névteret a globálisak számára, de nem használ irányelveket using a névtér hatókörbe helyezéséhez, ezért minden hivatkozásnak az egyértelmű minősített neveket kell használnia:
// 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;
}