Compilerwarnung (Ebene 1) C4503
"Bezeichner" : Die Länge des eingerichteten Namens wurde überschritten, der Name wurde abgeschnitten.
Hinweise
Diese Compilerwarnung ist veraltet und wird in Visual Studio 2017 und höheren Compilern nicht generiert.
Der verzierte Name war länger als der Compilergrenzwert (4096) und wurde abgeschnitten. Um diese Warnung und die Abkürzung zu vermeiden, verringern Sie die Anzahl der Argumente oder die Namenlänge der verwendeten Bezeichner. Versehene Namen, die länger als der Compilergrenzwert sind, haben einen Hash angewendet und sind nicht in Gefahr, dass ein Namenskonflikt besteht.
Wenn Sie eine ältere Version von Visual Studio verwenden, kann diese Warnung ausgegeben werden, wenn Ihr Code Vorlagen enthält, die sich wiederholt auf Vorlagen spezialisiert haben. Beispielsweise eine Zuordnung von Karten (aus der C++-Standardbibliothek). In diesem Fall können Sie ihre Typedefs zu einem Typ (z. B. einem struct
) machen, der die Karte enthält.
Sie können sich jedoch entscheiden, den Code nicht neu zu strukturieren. Es ist möglich, eine Anwendung zu versenden, die C4503 generiert, aber wenn Sie Verknüpfungszeitfehler auf einem abgeschnittenen Symbol erhalten, kann es schwieriger sein, den Typ des Symbols im Fehler zu ermitteln. Das Debuggen kann auch schwieriger sein; Der Debugger kann den Symbolnamen dem Typnamen schwer zuordnen. Die Richtigkeit des Programms ist jedoch von dem abgeschnittenen Namen nicht betroffen.
Beispiel
Im folgenden Beispiel wird C4503 in Compilern vor Visual Studio 2017 generiert:
// 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;
In diesem Beispiel wird eine Möglichkeit zum Umschreiben des Codes zum Auflösen von C4503 gezeigt:
// 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;