_CRT_SECURE_NO_WARNINGS 본문
C++로 코딩을 할 때 _CRT_SECURE_NO_WARNINGS이라는 문구를 적는 사람들이 많다.
무슨 뜻인지 알아보자 !
먼저 CRT는 C Run-Time Libraries의 줄임말이다.
즉, C++ 기본 라이브러리의 한 부분이다. Visual Studio 버전이 올라가면서 CRT에도 많은 변화가 생겼다. scanf, gets, strcpy, fopen과 같은 함수들을 사용할 때 unsafe하다는 경고를 본 적이 있을 것이다. scanf_s, gets_s와 같이 _s를 붙여서 더 안전한 함수가 만들어졌으니 사용하라는 뜻이다.
예를 들어, 위 경우에 buffer의 capacity가 message보다 작다. 이 때, strcpy는 buffer overflow가 발생하게 된다. 즉, 메모리의 낭비를 불러온다. 하지만 strcpy_s는 size를 정해주기 때문에 자체적으로 5를 초과하는 사이즈는 쓰지 않기 때문에 buffer overflow를 막을 수 있다.
unsafe 경고는 "이렇게 좋은 함수를 만들어놨으니 써라 !"라는 뜻이다. 하지만, 기존의 함수를 사용해도 이상이 없는 상황에 경고로 인해 컴파일이 되지 않는 경우가 생길 수 있다. 이 때, #define _CRT_SECURE_NO_WARNINGS를 추가해줌으로써 경고문이 발생하지 않게 할 수 있다.
전처리기에 _CRT_SECURE_NO_WARNINGS를 추가하는 방법
#pragma warning(disable:4996)을 사용해서 경고문이 발생하지 않게 하는 방법
등을 통해서도 같은 효과를 얻을 수 있다.
'C++' 카테고리의 다른 글
ps하다가 런타임에러가 나는 경우 ! (계속 업데이트) (0) | 2019.04.02 |
---|---|
stl vector / list / queue 속도 비교 (0) | 2019.04.01 |
C++에서 String 출력하기 (0) | 2019.01.25 |
C++ cin, cout 입출력 속도 높이기 (0) | 2018.11.30 |