C4996 오류는 초기에 C++으로 개발하다보면, 정말 자주 볼 수 있는 에러입니다. C4996에러가 뜨면서 빌드가 안되고, 분명 예제사이트에서는 잘만 사용하던데, 나만 안되는 이유를 찾기 정말 어려웠습니다. 해당문제는 MSVC(Microsoft Visual C++)가 강제로 보안에 취약한 함수를 사용하지 못하도록 제어하기위해서 강제로 발생시키는 에러입니다. 해결방법은 총 3가지가 있고, 따라만 해주시면 쉽게 개선이 가능한 에러코드입니다.
warning C4996에러발생
빌드를 할때 아래와같은 에러코드가 발생됩니다.
the posix name for this item is deprecated. instead use the ISO C and C++ ....
대부분 C4996에러가 발생되는 이유는 보안에 취약한 윈도우 제공 함수를 쓰기 때문입니다.
strstr, strcmp, strcpy, wcsicmp,wcsstr,strupr, itoa 등등
초창기에 개발되었던 함수들을 사용할때 발생하는 에러입니다.
아래 소개드리는 3개중에 한개만 적용하신다면
신속하게 문제를 해결하실 수 있습니다.
해결방법1. 함수변경
wcsicmp 함수를 보안이 개선된 _wcsicmp함수로 변경하면 C4996에러가 말끔하게 해결됩니다. 대부분 C4996에러는 함수 앞에 언더바(_)를 붙여서 개선된 함수를 제공하고 있습니다.
해결방법2. 경고 무시하는 코드넣기
증상이 발생하고 있는 소스 상단부분에 아래와같이 pragma warning(disable:4996)을 추가해준다면, C4996경고는 무시하고 넘어가게 됩니다.
#include <iostream>
#pragma warning(disable:4996)
해결방법3. 프로젝트 속성에 넣기
자신의 프로젝트의 속성페이지에서 직접 에러코드를 무시하도록 추가합니다.
프로젝트 우클릭 - 속성 - 구성 속성 - C/C++ - 고급
해당 탭으로 이동하신 다음에 '특정 경고 사용 안 함' 에 4996을 추가합니다.
안되는 해결방법
코드상에 아래 두줄 추가하여라는 stack overflow에 서양형님들의 조언이 있지만, 실제로는 동작하지 않는 해결방법입니다.
#define _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#define _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_DEPRECATE
ⓒ 2023. IT훈이 all rights reserved.
아마존 라이트세일(Lightsail) wordpress 블로그 만들기 강좌 #2탄, 언어변경/관리자 계정추가
'훈, IT 공부 > C,C++,MFC' 카테고리의 다른 글
C++ 에서의 .h 헤더파일 확장자 사용하지 않는 이유 (0) | 2023.09.12 |
---|---|
C/C++ IPropertyStore / 파일 속성 모두 얻어오기 .doc .docs .xlsx .pptx (0) | 2022.08.11 |
[VS에러] 함수에서 참조되는 확인할 수 없는 외부기호 LNK1120, LNK2019 (6) | 2021.01.14 |
[C++] 멀티바이트 -> 유니코드 변환을 위한 4가지 방법 (6) | 2020.06.05 |
C++ PCRE 정규식 라이브러리 사용해서 정규표현식 사용하기 (2) | 2020.04.08 |
댓글