Avertissement du compilateur (niveau 1) C4503
'identificateur' : longueur de nom décorée dépassée, nom a été tronqué
Notes
Cet avertissement du compilateur est obsolète et n’est pas généré dans Visual Studio 2017 et les compilateurs ultérieurs.
Le nom décoré était plus long que la limite du compilateur (4096) et a été tronqué. Pour éviter cet avertissement et la troncation, réduisez le nombre d’arguments ou les longueurs de noms des identificateurs utilisés. Les noms décorés qui sont plus longs que la limite du compilateur ont un hachage appliqué et ne sont pas en danger de collision de noms.
Lorsque vous utilisez une version antérieure de Visual Studio, cet avertissement peut être émis lorsque votre code contient des modèles spécialisés sur des modèles à plusieurs reprises. Par exemple, une carte de cartes (à partir de la bibliothèque standard C++). Dans ce cas, vous pouvez rendre votre typedefs un type (par struct
exemple) qui contient la carte.
Toutefois, vous pouvez décider de ne pas restructurer votre code. Il est possible d’expédier une application qui génère l’erreur C4503, mais si vous obtenez des erreurs de temps de liaison sur un symbole tronqué, il peut être plus difficile de déterminer le type du symbole dans l’erreur. Le débogage peut également être plus difficile ; le débogueur peut avoir des difficultés à mapper le nom du symbole au nom du type. Toutefois, la justesse du programme n’est pas affectée par le nom tronqué.
Exemple
L’exemple suivant génère l’erreur C4503 dans les compilateurs avant 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;
Cet exemple montre une façon de réécrire votre code pour résoudre 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;