Partilhar via


Aviso do compilador (nível 1) C4503

'identifier': comprimento de nome decorado excedido, o nome foi truncado

Comentários

Esse aviso do compilador é obsoleto e não é gerado no Visual Studio 2017 e em compiladores posteriores.

O nome decorado foi maior que o limite do compilador (4096) e foi truncado. Para evitar esse aviso e o truncamento, reduza o número de argumentos ou os comprimentos de nome dos identificadores usados. Os nomes decorados mais longos que o limite do compilador têm um hash aplicado e não correm o risco de uma colisão de nome.

Ao usar uma versão mais antiga do Visual Studio, esse aviso pode ser emitido quando seu código contém modelos especializados em modelos repetidamente. Por exemplo, um mapa de mapas (da Biblioteca Padrão do C++). Nessa situação, você pode tornar seus typedefs um tipo (um struct, por exemplo) que contém o mapa.

No entanto, você pode decidir não reestruturar seu código. É possível enviar um aplicativo que gera o erro C4503, mas se você receber erros de tempo de vinculação em um símbolo truncado, poderá ser mais difícil determinar o tipo do símbolo no erro. A depuração também pode ser mais difícil; o depurador pode ter dificuldade para mapear o nome do símbolo para o nome do tipo. A integridade do programa, no entanto, não é afetada pelo nome truncado.

Exemplo

O seguinte exemplo gera o erro C4503 em compiladores anteriores ao 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;

Este exemplo mostra uma maneira de reescrever seu código para resolver o erro 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;