구글링을 해보면 MSDN에 아래와 같이 나온다.

C4748
http://msdn.microsoft.com/ko-kr/library/ms235398(v=vs.80).aspx 

C4742
http://msdn.microsoft.com/ko-kr/library/k334t9xx(v=vs.80).aspx 

하지만...
뭔가 난해하고 단순 명료하고 응용하기 어려운 저 샘플은 뭐란 말인가...
실무용 코드는 더 복잡 난해하고 개판인 경우가 많단 말이다!!!

C4748의 경우 컴파일 옵션 문제이다.
프로젝트 속성의 프로젝트 컴파일 옵션에는 분명 /O2가 적용되어 있다.
하지만 솔루션 탐색기에서 각 소스 파일하나하나 속성을 확인해 보면 컴파일 옵션에 /O2가 빠져있다.
이건 MSDN에도 없다고!!!

젠... 이건 뭥미?
VS 하위버전에서 상위 버전으로 컨버팅 시 문제인지 아니면 원래 프로젝트 생성 시점부터 문제였는지 확인 불가능
대형 프로젝트의 경우 수정해야 하는 파일 갯수가 너무 많아서 GG

결국 메모장에서 .vcxproj파일을 까서 일괄 수정 하였다.
'프로젝트 구성 이름|x64'">Disabled</Optimization>
'프로젝트 구성 이름|x64'">MaxSpeed</Optimization> 

'프로젝트 구성 이름|x64'">EnableFastChecks</BasicRuntimeChecks>
'프로젝트 구성 이름|x64'">Default</BasicRuntimeChecks>

위와 같이 수정 후 C4748에 대한 warning는 수정 완료!!!

--------------------------------------------------------------------------------------------------- 

C4742 이건 구조체 사이즈가 서로 다르다는 뭐 그런 저런 얘기...
근데!!!
warning 라인을 아무리 찾아봐도 해당 내용을 찾을 수 없었다.
젠...

atl어쩌고 관련 warning가 많이 나왔는데...
혹시나 하고 의심가는 부분은...
x86프로젝트를 x64로 컨버팅 과정에서
<atlcoll.h>
<commctrl.h>
<windows.h>
등 윈도우 관련 헤더들에 _WIN64 전처리기 처리 했을 경우 기본 8바이트로 체크하게 되어 있는 것 같다. (시간상 거기까지 분석할 수 없음)

프로젝트 기본 속성에 구조체 멤버맞춤이 1바이트로 되어 있는 경우
위 부분에서 구조체 사이즈가 다르다고 warning을 뱉어낸다. 

위 헤더들을 _WIN64일 경우 기본 8바이트로 처리하도록 작업해 준다.
#ifdef _WIN64
    #pragma pack(8)
    #include <windows.h>
    #include <atlcoll.h>
    #pragma pack()
#endif // _WIN64 

이로써 C4742도 해결!!!

찜찜한 warning 두개 덕분에 하루를 날렸다.
내 시간 어쩔... 
안정적인 DNS서비스 DNSEver DNS server, DNS service
Posted by 키르히

댓글을 달아 주세요