Sdílet prostřednictvím


Upozornění kompilátoru (úroveň 1) C4503

'identifier' : zdobená délka názvu byla překročena, název byl zkrácen

Poznámky

Toto upozornění kompilátoru je zastaralé a není generováno v sadě Visual Studio 2017 a novějších kompilátorech.

Zdobený název byl delší než limit kompilátoru (4096) a byl zkrácen. Chcete-li se vyhnout tomuto upozornění a zkrácení, snižte počet argumentů nebo délky názvů použitých identifikátorů. Dekorované názvy, které jsou delší než limit kompilátoru, mají použitou hodnotu hash a nejsou ohroženy kolizí názvů.

Pokud používáte starší verzi sady Visual Studio, může být toto upozornění vydáno, když kód obsahuje šablony specializované na šablony opakovaně. Například mapa map (ze standardní knihovny jazyka C++). V takovém případě můžete typedefs nastavit jako typ ( structnapříklad), který obsahuje mapu.

Můžete se ale rozhodnout, že svůj kód nebudete restrukturalizovat. Je možné odeslat aplikaci, která generuje C4503, ale pokud se zobrazí chyby času propojení u zkráceného symbolu, může být obtížnější určit typ symbolu v chybě. Ladění může být také obtížnější; Ladicí program může mít obtížné mapování názvu symbolu na název typu. Správnost programu však není ovlivněna zkráceným názvem.

Příklad

Následující ukázka vygeneruje C4503 v kompilátorech před sadou 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;

Tato ukázka ukazuje jeden ze způsobů, jak přepsat kód a vyřešit tak 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;