2016.06.21 06:28

Visual C++ C4503 Warning Fix

Lyn
조회 수 4744 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
#include <map>
 
using namespace std;
 
struct VeryLongClassNameType1
{
 
};
struct VeryLongClassNameType2
{
 
};
struct VeryLongClassNameType3
{
 
};
struct VeryLongClassNameType4
{
 
};
struct VeryLongClassNameType5
{
 
};
typedef map<VeryLongClassNameType1VeryLongClassNameType2LongNameStdMap;
typedef map<VeryLongClassNameType3LongNameStdMapLongNameStdMap2;
typedef map<VeryLongClassNameType4LongNameStdMap2LongNameStdMap3;
typedef map<VeryLongClassNameType5LongNameStdMap3LongNameStdMap4;
 
int main()
{	
	LongNameStdMap4 a;
}

 

위와 같은 코드를 빌드 하면 컴파일과 실행엔 문제가 없지만 C4503 Waring 이 뜹니다.

이 Warning 은 http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k(C4503)&rd=true 에서 보다 시피, type명이 너무 길어서 짤릴 수 있다는 경고인데, 이 경우 나중에 크래시 덤프 등을 얻어서 처리할때 type 이 매칭 되지 않을 우려가 있습니다. 사실 4098 라는 type 길이는 충분했... 어야 했는데 template 가 겹치고 겹치면서(주로 Map을 겹쳐서 tree 형태의 자료구조를 구성 할 경우겠지만 ....) 의도하지 않게 긴 type 명을 가지게 되어 버리는 경우가 있습니다.

 

이 경우 위의 MSDN 링크 에서는 아래와 같은 방식의 다른 클래스로 한번 Wrapping 하는 해결책을 제시 하고 있습니다.

typedef map<VeryLongClassNameType1VeryLongClassNameType2LongNameStdMap;
typedef map<VeryLongClassNameType3LongNameStdMap_LongNameStdMap2;
struct LongNameStdMap2
{
	_LongNameStdMap2 Element;
};
typedef map<VeryLongClassNameType4LongNameStdMap2LongNameStdMap3;
typedef map<VeryLongClassNameType5LongNameStdMap3LongNameStdMap4;
struct NewClass
{
	LongNameStdMap4 Element;
};

이 경우 map 에 대한 접근이 a.Element.find() 처럼 한단계가 더 들어가게 됩니다... 만약 이름이 그 이상으로 길어서 2~3번 더 중간에 이름을 끊어 줘야 하는 경우, a.Element.Element.find() 와 같은 상황이 발생합니다. warning 을 제거하기 위해 의도와 다른 불편한 사용 방법을 강요받게 되는거지요. 이건 좋은 방법이라고 할 수 없습니다.

 

이럴때는 

typedef map<VeryLongClassNameType1VeryLongClassNameType2LongNameStdMap;
typedef map<VeryLongClassNameType3LongNameStdMap_LongNameStdMap2;
class LongNameStdMap2 : _LongNameStdMap2
{
 
};
typedef map<VeryLongClassNameType4LongNameStdMap2LongNameStdMap3;
typedef map<VeryLongClassNameType5LongNameStdMap3LongNameStdMap4;
class NewClass : LongNameStdMap4
{
 
};

 

처럼 public 상속을 해버리면 간단합니다... 그럼 일반적으로 map을 쓰는것과 전혀 다르지 않는 방법으로 코딩하면서 워닝만을 제거 할 수 있습니다.

TAG •
?

List of Articles
번호 제목 글쓴이 날짜 조회 수
114 사이트에 SSL 인증서를 적용 했습니다... 적용 방법 Lyn 2016.09.07 2062
113 add "open as administrator" menu for gnome file explorer(nautilus) file Lyn 2016.06.25 4362
» Visual C++ C4503 Warning Fix Lyn 2016.06.21 4744
111 New Calling Convention for AMD64(=EM64T, x64) and IA32(=x86) file Lyn 2016.04.17 5409
110 What is the calling convention of the C++ lambda file Lyn 2016.04.11 5347
109 Nuget error after Visual Studio 2015 Update 2 install file Lyn 2016.04.04 5419
108 Geforce 364.72 Vulkan Support file Lyn 2016.03.31 4063
107 [연속기획UD] 3. OpenVPN GUI Client file Lyn 2016.03.14 4761
106 How to Windows Disk Drive Performance Counter On Lyn 2016.03.12 3251
105 [연속기획UD] 2. NAVER Font Installer file Lyn 2016.03.06 4673
104 [연속기획UD] 1. Windows Service Manager file Lyn 2016.03.06 4332
103 [연속기획UD] 윈도우 Desktop Application 의 Unicode, High DPI 를 신경씁시다 Lyn 2016.03.06 4294
102 Windows 10 network priority change file Lyn 2016.02.16 2813
101 VMWare 12 + Windows 10 Bug file Lyn 2016.01.03 3180
100 C++11 Type Traits. 라이브러리가 프로그래머의 제어에서 벗어나다 1 file Lyn 2015.12.30 4604
99 Safe scanf 계열 함수의 함정. 자나깨나 크기조심 secret Lyn 2015.11.17 113
98 OpenVPN이 2.3.8 으로 업데이트 되면서 이것저것 바뀌었는데... 1 Lyn 2015.09.08 2610
97 Disable Windows 10 Device Driver Automatic Update Lyn 2015.08.25 2318
96 만약 사정상 Windows 10 자동 업데이트를 꺼야 한다면 설치해야 할 패치 Lyn 2015.07.22 2377
95 잠시후 한국시각 21일 0시부터 VS 2015 런칭행사를 합니다. Lyn 2015.07.21 2255
Board Pagination Prev 1 ... 2 3 4 5 6 7 ... 8 Next
/ 8