Megosztás a következőn keresztül:


Fordító figyelmeztetése (4. szint) C4459

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;
}