Compartir vía


Advertencia del compilador (nivel 1) C4503

"identifier": se superó la longitud del nombre representativo; el nombre aparece truncado

Comentarios

Esta advertencia del compilador está obsoleta y no se genera en Visual Studio 2017 ni en compiladores posteriores.

El nombre representativo era más largo que el límite del compilador (4096) y se truncó. Para evitar esta advertencia y el truncamiento, reduzca el número de argumentos o las longitudes de los nombres de los identificadores usados. Los nombres representativos que son más largos que el límite del compilador tienen aplicado un código hash y no hay peligro de un conflicto de nombres.

Al usar una versión anterior de Visual Studio, se puede emitir esta advertencia cuando el código contiene plantillas especializadas en plantillas repetidamente. Por ejemplo, una asignación de asignaciones (de la biblioteca estándar de C++). En esta situación, puede convertir sus typedefs en un tipo (struct, por ejemplo) que contiene la asignación.

Sin embargo, puede decidir que no desea reestructurar el código. Es posible enviar una aplicación que genera la advertencia C4503, pero si recibe errores de tiempo de vínculo en un símbolo truncado, puede ser más difícil determinar el tipo del símbolo en el error. La depuración también puede ser más difícil; es posible que el depurador tenga problemas para asignar el nombre del símbolo al nombre del tipo. Sin embargo, el nombre truncado no afecta la exactitud del programa.

Ejemplo

El ejemplo siguiente genera la advertencia C4503 antes de 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;

En este ejemplo, se muestra una manera de reescribir el código para resolver la advertencia 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;