정리

[Error/Warning] warning C4995

저장소/VC++

MSDN을 보면 아래와 같이 설명해놨다.

오류 메시지
'function': 이름이 #pragma deprecated로 표시되었습니다.
'function': name was marked as #pragma deprecated

컴파일러에서 pragma deprecated로 표시한 함수를 발견했습니다. 이 함수는 이후 릴리스에서 제공되지 않을 수 있습니다. 다음 예제와 같이 warning pragma를 사용하여 이 경고를 해제할 수 있습니다.

뭐...
경고 쯤이야 해도 상관 없지만~
이까이꺼  warning pragma로 해제해도 되겠지만~
보고 그냥 지나칠 수 없지!

상황은 대략 아래와 같다.

\include\cstdio(49) : warning C4995: 'gets': 이름이 #pragma deprecated로 표시되었습니다.
\include\cstdio(53) : warning C4995: 'sprintf': 이름이 #pragma deprecated로 표시되었습니다.
\include\cstdio(56) : warning C4995: 'vsprintf': 이름이 #pragma deprecated로 표시되었습니다.
\include\cstring(22) : warning C4995: 'strcat': 이름이 #pragma deprecated로 표시되었습니다.
\include\cstring(23) : warning C4995: 'strcpy': 이름이 #pragma deprecated로 표시되었습니다.
\include\cwchar(36) : warning C4995: 'swprintf': 이름이 #pragma deprecated로 표시되었습니다.
\include\cwchar(37) : warning C4995: 'vswprintf': 이름이 #pragma deprecated로 표시되었습니다.
\include\cwchar(39) : warning C4995: 'wcscat': 이름이 #pragma deprecated로 표시되었습니다.
\include\cwchar(41) : warning C4995: 'wcscpy': 이름이 #pragma deprecated로 표시되었습니다.

크아아아아아ㅇ니마어림나ㅓ리마너~
뭐냐 이거... ㅡ,.ㅡ

include 항목을 살펴보았다.

...
#include <strsafe.h>
#include <list>
...
뭔가 냄새가 나는군...
strsafe와 list의 include 순서를 바꾸니 언제 그랬냐는듯 warning이 사라졌다.
흐음... 원인이 뭐였을까...
뒤적거리다 드디어 발견하다!!!!! 오오오오오오~~~~~
iosfwd
과연 흉물스럽도다!!!
list의 include 이력을 쭈욱~ 타고 올라가보면 utility라는 놈이 내부에서 iosfwd를 include하고있다.
음흉한것!!!
뭐... 그냥 그렇다는거다.
결론은 include 순서 바꾸라는거.

끝.

덧.1
어디선가 봤는데 strsafe.h를 include하면 정의 내용을 변경한다고 누군가의 블로그를 봤던 것 같은데 자세한 내용은 기억나지 않는다. 그저 맘 편하게 include 순서를 제일 마지막에 해주는 것이 몸과 마음이 편해지는 지름길이라는 것 뿐...