Visual Studio에서 기본적으로 프로젝트에서 보안 경고 (_CRT_SECURE_NO_WARNINGS) 제거


196

scanf ()와 같은 함수를 사용할 때 발생하는 프리 컴파일러 보안 경고를 제거하는 모든 프로젝트에 기본적으로 설정하는 방법이 있습니까? 프로젝트 옵션 또는 #define _CRT_SECURE_NO_WARNINGS코드 시작 부분에 줄을 추가하여 할 수 있음을 발견했습니다 .

나는 프로그래밍 콘테스트를 해결하기 위해 새로운 프로젝트를 반복해서 만들고 있으며 추가하는 것은 정말 성가신 일이며 귀중한 시간이 걸립니다.

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif

코드의 시작 부분에서 또는 새 프로젝트를 시작할 때마다 프리 컴파일러 옵션에서 설정합니다.


2
_CRT_SECURE_NO_WARNINGS가 정의 된 프로젝트 템플릿을 내보낼 수 있습니다.
BlueWanderer

좋은 해결 방법 인 것 같습니다. 나는 그것을 찾고 있습니다. 감사!
Juan Martinez

3
당신은 결국 타입 #define _CRT_SECURE_NO_WARNINGS에 1 1 잊지
마티 반 WEZEL

3
끝에 @MartijnvanWezel 1은 필요하지 않습니다.
qqqqq

1
@qqqqq 그것은 사실이 될 것입니다
Martijn van Wezel

답변:


286

솔루션 탐색기에서 원하는 모든 프로젝트를 표시하십시오.

Alt-F7을 누르거나 솔루션 탐색기에서 마우스 오른쪽 버튼을 클릭하고 "속성"을 선택하십시오.

구성 : 모든 구성

프리 프로세서 정의 행을 클릭하여 편집기를 호출하십시오.

편집 ...을 선택하십시오.

"_CRT_SECURE_NO_WARNINGS"를 상단의 전 처리기 정의 흰색 상자에 복사하십시오.

여기에 이미지 설명을 입력하십시오


10
이것은 OP가 이미 알고 있다고 생각하는 하나의 프로젝트에 추가하는 방법을 설명합니다 (100 % 명확하지는 않지만). 주요 질문은 모든 프로젝트에 표시되도록 추가하는 방법입니다. 이상적으로 어떻게 % (PreprocessorDefinitions) 매크로에 추가하여 어디에나 포함시킬 수 있습니까?
Rob Gilliam

2015 년 1 월 13 일자로 수정되었습니다.

첫 단계 만 설명합니다. 필요한 모든 것을 구성한 후에는 프로젝트 템플릿도 내보내고 싶을 것입니다 ( 방법 : 지침은 프로젝트 템플릿 만들기 참조).
IInspectable

92

VS에 익숙하지 않고 C에 익숙하지 않기 때문일 수도 있지만, 내가 만들 수 있었던 유일한 것은 추가하는 것입니다.

#pragma warning(disable:4996)

내 파일 상단에서 sprintf로 인한 C4996 오류를 억제했습니다.

약간 성가 시지만 내 작은 코드에 가장 적합합니다.

나는 그것에 대해 읽었습니다 : https://msdn.microsoft.com/en-us/library/2c8f766e.aspx


5
이 페이지에 표시된 #define의 모든 변형 (끝에 1이 있거나없는)을 시도했지만 #pragma 만 나를 위해 일했습니다. (VS2013 Community edition) 뭔가 빠진 것이 확실하지만 어느 시점에서 작업을하려면 작업이 필요합니다.
Spike0xff

똑같은 일이 있었다-그것은 기분이 좋지만 하루가 끝나면 잘 작동합니다. @ Spike0xff
Shaun314

2
VC ++ 2015에서는 _CRT_SECURE_NO_WARNINGS가 작동하지 않지만 위의 작동은 확인할 수 있습니다. 감사!
Shital Shah

@ShitalShah 귀하의 확인은 개인 실험 또는 공식 Microsoft 문서를 기반으로합니까?
qqqqq

1
@bri : 무조건 기본값을 설정하면 원하지 않는 효과가 발생할 수 있습니다. 당신은 실제로 이전의 모습으로 행동을 회복 시키려고했습니다. 그렇게하려면 대신 #pragma warning(push)/를#pragma warning(pop) 사용하십시오.
IInspectable

29

자동적으로 아닙니다. BlueWandered가 제안한 대로 프로젝트 템플릿을 만들 거나 현재 및 향후 프로젝트에 사용할 수있는 사용자 지정 속성 시트를 만들 수 있습니다.

  1. 속성 관리자를 엽니 다 (보기-> 속성 관리자)
  2. 속성 관리자에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 "새 프로젝트 속성 시트 추가"를 선택하십시오.
  3. 이름을 지정하고 공통 디렉토리에 작성하십시오. 속성 시트가 ​​모든 빌드 대상에 추가됩니다.
  4. 새 속성 시트를 마우스 오른쪽 버튼으로 클릭하고 "속성"을 선택하십시오. 그러면 속성이 열리고 프로젝트의 설정을 편집 할 때와 마찬가지로 설정을 변경할 수 있습니다.
  5. "공통 특성-> C / C ++-> 전 처리기"로 이동하십시오.
  6. "전 처리기 정의"설정을 편집하고을 추가하십시오 _CRT_SECURE_NO_WARNINGS.
  7. 저장하면 끝입니다.

이제 새 프로젝트를 만들 때마다이 속성 시트를 다음과 같이 추가하십시오.

  1. 속성 관리자를 엽니 다 (보기-> 속성 관리자)
  2. 속성 관리자에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 "기존 프로젝트 속성 시트 추가"를 선택하십시오.

여기에서 이점은 공통 설정을 관리 할 수있는 단일 장소를 얻을뿐만 아니라 설정을 변경할 때마다 해당 설정을 사용하는 모든 프로젝트에 전파된다는 것입니다. 이것은 _CRT_SECURE_NO_WARNINGS프로젝트에 사용하려는 Boost와 같은 라이브러리 나 많은 설정이있는 경우에 유용합니다 .


대단해. 오늘까지 부동산 관리자를 발견 한 적이 없습니다.
James Johnston

20

여기에있는 모든 솔루션이 VS2013에서 작동하지 않지만 모든 경고가 표시 #define _CRT_SECURE_NO_WARNINGS되기 직전에 stdafx.h에 넣었습니다 #pragma once. 참고 : 연구를 지원하기 위해 프로토 타이핑 목적으로 만 코드를 작성하므로 코드 작성시이 방법의 의미를 이해해야합니다.

도움이 되었기를 바랍니다


1
어디에 있습니까 stdafx.h?
SomethingSothinging

1
모르는 사람들을 위해 다음과 같이 1로 정의해야합니다. #define _CRT_SECURE_NO_WARNINGS 1
kirk.burleson

11

VS 2017의 내 두 센트 :

stdafx.h에서 다음 스타일 모두에서 작동하는지 확인할 수 있습니다.

ㅏ)

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1 
#define _WINSOCK_DEPRECATED_NO_WARNINGS 1 

비)

#define _CRT_SECURE_NO_WARNINGS 1 
#define _WINSOCK_DEPRECATED_NO_WARNINGS 1 
#pragma once

(MSDN 네트워크 호출에 대한 다른 정의를 추가했습니다.) 물론 a를 선호합니다.

다음을 확인할 수 있습니다. #define _CRT_SECURE_NO_WARNINGS (값 없음)가 작동 하지 않습니다 .

추신 : 실제 포인트는 함수의 선언 전에, 즉 * .h 앞에 정의하는 것입니다.


Visual Studio 2010에서도 작동합니다.
ebyrob

8

" _CRT_SECURE_NO_WARNINGS "를 복사 하여 프로젝트-> 속성-> c / c ++-> 전 처리기-> 전 처리기 정의 에 붙여 넣기 확인을 클릭하십시오.


0

프로젝트에서 stdafx.h를 사용하지 않으면 다음 줄을 .cpp 파일의 첫 줄로 넣을 수 있으며 컴파일러 경고는 사라져야합니다. 적어도 Visual Studio C ++ 2008에서는 그랬습니다.

#ifdef _CRT_SECURE_NO_WARNINGS
#undef _CRT_SECURE_NO_WARNINGS
#endif
#define _CRT_SECURE_NO_WARNINGS 1

주석과 빈 줄을 앞에 두는 것이 좋습니다.


0

_CRT_SECURE_NO_WARNINGS 를 프로젝트의 속성에 추가 할 수 있지만 가장 쉬운 방법은 stdafx.h를 사용하여 모든 종류의 경고 및 오류를 비활성화하는 것입니다.

#pragma once

또한 _CRT_SECURE_NO_WARNINGS에 대한 값 (예 : "1")을 정의 할 필요가 없습니다. 따라서 다음과 같아야합니다.

#define _CRT_SECURE_NO_WARNINGS 

#pragma once

이것은 올바르지 않습니다. 순서는 차이가 없습니다. 조금도. 나는 당신이 이유가 없기 때문에 왜 이것이 필요한지 설명하지 않았다고 가정합니다.
IInspectable

이것은 "순서"의 문제가 아니며, 단지 두 번만 확인했습니다. #pragma 뒤에 #define _CRT_SECURE_NO_WARNINGS를 배치하면이 오류가 계속 발생합니다!
Michael Haephrati

동작 #pragma once은 구현 정의되어 있지만 Visual Studio의 일반적인 사실상 표준을 따릅니다. 전 처리기 기호를 pragma보다 먼저 정의했는지 또는 그 이후에 정의했는지에 따라 차이가있는 경우 프로젝트 구성이 손상되었습니다 (이것은 "사전 컴파일 된 헤더""stdafx.h를 과도하게 가정하는 것으로 가정합니다). " ).
IInspectable

"파손 된 프로젝트 구성"의 의미는 무엇입니까? 새 Win32 프로젝트를 만들고 두 시나리오를 모두 테스트했습니다.
Michael Haephrati

상기 봐 제발 공식 문서 에 대해 배울 수있는 사실 이 전 처리기 기호를 사용하기위한 요구 사항을.
IInspectable
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.