Kompilatorvarning (nivå 1) C4503

"identifier" : den dekorerade namnlängden överskreds, namnet trunkerades

Anmärkningar

Den här kompilatorvarningen är föråldrad och genereras inte i Visual Studio 2017 och senare kompilatorer.

Det dekorerade namnet var längre än kompilatorgränsen (4096) och trunkerades. Undvik den här varningen och trunkeringen genom att minska antalet argument eller namnlängderna för de identifierare som används. Namn med dekorationer som är längre än kompilatorgränsen genomgår hashning och riskerar inte en namnkollision.

När du använder en äldre version av Visual Studio kan den här varningen utfärdas när koden innehåller mallar som är specialiserade på mallar upprepade gånger. Till exempel en karta över kartor (från C++-standardbiblioteket). I det här fallet kan du göra dina typedefs till en typ (till exempel) structsom innehåller kartan.

Du kan dock välja att inte omstrukturera koden. Det är möjligt att skicka ett program som genererar C4503, men om du får länktidsfel på en trunkerad symbol kan det vara svårare att fastställa typen av symbol i felet. Felsökning kan också vara svårare. felsökaren kan ha svårt att mappa symbolnamnet till typnamnet. Programmets korrekthet påverkas dock inte av det trunkerade namnet.

Example

I följande exempel genereras C4503 i kompilatorer före Visual Studio 2017:

// C4503.cpp
// compile with: /W1 /EHsc /c
// C4503 expected
#include <string>
#include <map>

class Field{};

typedef std::map<std::string, Field> Screen;
typedef std::map<std::string, Screen> WebApp;
typedef std::map<std::string, WebApp> WebAppTest;
typedef std::map<std::string, WebAppTest> Hello;
Hello MyWAT;

Det här exemplet visar ett sätt att skriva om koden för att lösa C4503:

// C4503b.cpp
// compile with: /W1 /EHsc /c
#include <string>
#include <map>

class Field{};

struct Screen2 {
   std::map<std::string, Field> Element;
};

struct WebApp2 {
   std::map<std::string, Screen2> Element;
};

struct WebAppTest2 {
   std::map<std::string, WebApp2> Element;
};

struct Hello2 {
   std::map<std::string, WebAppTest2> Element;
};

Hello2 MyWAT2;