2016.06.21 06:28

Visual C++ C4503 Warning Fix

Lyn
조회 수 4987 추천 수 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
번호 제목 글쓴이 날짜 조회 수
158 현재 MSDN Download Page file Lyn 2013.09.23 19675
157 폰트 TTF와 OTF 그 역사의 아이러니함. Lyn 2015.06.30 3011
156 특정 Thread가 Wait계열 함수에 의해 Block 중인지 확인하기 file Lyn 2012.06.28 27407
155 컨테이너가 파괴될 때 소유한 객체 자동으로 파괴하기 Lyn 2008.10.22 36903
154 잠시후 한국시각 21일 0시부터 VS 2015 런칭행사를 합니다. Lyn 2015.07.21 2441
153 웹 개발 문서가 MDN으로 통합 Lyn 2017.12.05 894
152 요즘 공부를 안하니 쓸게 없네요 Lyn 2018.06.02 722
151 외주도 안하고 공부도 안하니 이 서버가 무용지물이 되어가고 있군요 Lyn 2018.09.18 932
150 왜 MemberFunction Pointer 를 cout 으로 출력하면 1이 나올까 Lyn 2017.03.27 1886
149 오랫만에 인증서 업데이트와 서버 이전 Lyn 2018.07.07 667
148 오랫만에 서버 업데이트... 인데 Lyn 2015.03.03 5915
147 프로그래밍 대회 알고리즘 파트 문제 2 secret Lyn 2008.11.22 15485
146 심심해서 만들어본 폰 요금 계산기 Lyn 2019.08.18 551
145 서버를 이전했습니다. Lyn 2014.08.19 28885
144 서버를 Windows 2012 R2로 교체 하였습니다. 1 Lyn 2013.09.29 22215
143 새해복 많이받으세요 Lyn 2019.02.05 559
142 새해다 ... Lyn 2012.01.01 28237
141 사이트에서 http2 프로토콜을 지원 하기 시작 했습니다. Lyn 2016.10.01 4584
140 사이트에 SSL 인증서를 적용 했습니다... 적용 방법 Lyn 2016.09.07 2271
139 사용중인 FireFox 플러그인. Lyn 2010.05.18 42515
Board Pagination Prev 1 2 3 4 5 6 7 ... 8 Next
/ 8