stdio.h의 함수들이 C4996 에러로 컴파일되지 않을 때의 해결법

Visual Studio 2012 이상의 버전에서 scanf, gets 등의 stdio.h 내부 함수를 사용할 때,
다음과 같은 에러를 내면서 컴파일이 되지 않는다.

1>------ 빌드 시작: 프로젝트: warningTest, 구성: Debug Win32 ------
1>  warning.c
1>c:\users\nj\documents\visual studio 2012\projects\warningtest\warningtest\warning.c(9): error C4996: 'gets': This function or variable may be unsafe. Consider using gets_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\stdio.h(261) : 'gets' 선언을 참조하십시오.
========== 빌드: 성공 0, 실패 1, 최신 0, 생략 0 ==========

이러한 경우에 소스코드의 헤더 부분에 다음을 추가해주면 에러 없이 컴파일이 된다.
#pragma warning(disable:4996)

다음은 예시로 작성된 코드이다.
#include <stdio.h>
#pragma warning(disable:4996)
int main() {
    char userID[50];
    puts("Enter the userID: ");
    gets(userID);
    printf("userID: %s", userID);
    return 0;
}

Visual Studio 2008 버전에서는 warning만 출력하고 컴파일이 되었는데, 2012버전 이상에서는 에러로 처리되어 있다.

물론, _s 를 붙여서 사용하면 되지만 꼭 gets, scanf 등을 써야하는 경우도 발생할 수 있으므로 그러한 상황에서는 위처럼 처리해주면 된다.

댓글 남기기