본문 바로가기

Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
더보기
Archives
관리 메뉴

_CRT_SECURE_NO_WARNINGS 본문

C++

_CRT_SECURE_NO_WARNINGS

알광(Algwang) 2018. 11. 30. 16:23

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)을 사용해서 경고문이 발생하지 않게 하는 방법

등을 통해서도 같은 효과를 얻을 수 있다.


Comments