Delen via


Compilerwaarschuwing (niveau 4) C4459

declaratie van 'id' verbergt globale declaratie

Opmerkingen

De declaratie van id in het lokale bereik verbergt de declaratie van de identieke id in het globale bereik. Deze waarschuwing laat u weten dat verwijzingen naar identifier in dit bereik worden omgezet in de lokaal gedeclareerde versie, niet de globale versie, wat mogelijk wel of niet uw bedoeling is. Over het algemeen raden we u aan het gebruik van globale variabelen te minimaliseren als een goede technische praktijk. Als u de vervuiling van de globale naamruimte wilt minimaliseren, raden we u aan een benoemde naamruimte te gebruiken voor globale variabelen.

Deze waarschuwing is nieuw in Visual Studio 2015, in Microsoft C++-compilerversie 18.00. Als u waarschuwingen van die versie van de compiler of hoger wilt onderdrukken tijdens het migreren van uw code, gebruikt u de optie /Wv:18 compiler.

Example

In het volgende voorbeeld wordt C4459 gegenereerd:

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

Een manier om dit probleem op te lossen is door een naamruimte te maken voor uw globals, maar geen richtlijn te gebruiken using om die naamruimte binnen het bereik te brengen, zodat alle verwijzingen de ondubbelzinnige gekwalificeerde namen moeten gebruiken:

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