컴파일러 경고(수준 1) C4503
'identifier': 데코레이트된 이름 길이가 초과되고 이름이 잘렸습니다.
설명
이 컴파일러 경고는 사용되지 않으며 Visual Studio 2017 이상 컴파일러에서 생성되지 않습니다.
데코레이팅된 이름이 컴파일러 제한(4096)보다 길었으며 잘렸습니다. 이 경고 및 잘림을 방지하려면 사용된 식별자의 인수 수 또는 이름 길이를 줄입니다. 컴파일러 제한보다 긴 데코레이팅된 이름은 해시를 적용하고 이름 충돌 위험이 없습니다.
이전 버전의 Visual Studio를 사용하는 경우 코드에 템플릿에 특수화된 템플릿이 반복적으로 포함된 경우 이 경고가 발생할 수 있습니다. 예를 들어 C++ 표준 라이브러리의 지도입니다. 이 경우 typedefs를 맵이 포함된 형식( struct
예: 형식)으로 만들 수 있습니다.
그러나 코드를 재구성하지 않기로 결정할 수도 있습니다. C4503을 생성하는 애플리케이션을 제공할 수 있지만 잘린 기호에 연결 시간 오류가 발생하는 경우 오류의 기호 유형을 확인하기가 더 어려울 수 있습니다. 디버깅도 더 어려울 수 있습니다. 디버거는 기호 이름을 형식 이름에 매핑하기 어려울 수 있습니다. 그러나 프로그램의 정확성은 잘린 이름의 영향을 받지 않습니다.
예시
다음 샘플에서는 Visual Studio 2017 이전 컴파일러에서 C4503을 생성합니다.
// 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;
이 샘플에서는 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;