Dela via


Kompilatorvarning (nivå 4) C4459

deklaration av "identifierare" döljer global deklaration

Anmärkningar

Deklarationen av identifierare i det lokala omfånget döljer deklarationen av den identiskt namngivna identifieraren i det globala omfånget. Den här varningen låter dig veta att referenser till identifierare i det här omfånget matchar den lokalt deklarerade versionen, inte den globala versionen, som kanske eller kanske inte är din avsikt. I allmänhet rekommenderar vi att du minimerar användningen av globala variabler som en bra teknisk metod. För att minimera föroreningen av det globala namnområdet rekommenderar vi att du använder ett namngivet namnområde för globala variabler.

Den här varningen var ny i Visual Studio 2015 i Microsoft C++-kompilatorn version 18.00. Om du vill förhindra varningar från den versionen av kompilatorn eller senare när du migrerar koden använder du kompileringsalternativet /Wv:18 .

Example

I följande exempel genereras 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;
}

Ett sätt att åtgärda det här problemet är att skapa ett namnområde för dina globaler, men inte använda ett using direktiv för att föra in namnområdet i omfånget, så alla referenser måste använda de entydiga kvalificerade namnen:

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