_CRT_SECURE_NO_DEPRECATE를 통해 생성 된 경고 비활성화
_CRT_SECURE_NO_DEPRECATE
쉽게 복원하고 Visual Studio 버전에서 작동 할 수 있도록을 통해 생성 된 경고를 비활성화하는 가장 좋은 방법은 무엇입니까 ?
소스 코드를 오염시키지 않으려면 (이 모든 경고가 Microsoft 컴파일러에만 표시됨) _CRT_SECURE_NO_WARNINGS
"Project"-> "Properties"-> "Configuration properties"-> "C / C ++를 통해 프로젝트 설정 에 기호를 추가 하십시오. "->"전 처리기 "->"전 처리기 정의 ".
또한이 경고를 생성하는 헤더 파일을 포함하기 직전에 정의 할 수 있습니다. 다음과 같이 추가해야합니다.
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
그리고이 경고의 의미를 이해하고 MSVC 이외의 다른 컴파일러를 사용하지 않으려면 strcpy 대신 strcpy_s와 같은 안전한 버전의 함수를 사용하는 것이 좋습니다.
다음을 사용하여 경고가 나타나는 위치에서 일시적으로 경고를 비활성화 할 수 있습니다.
#pragma warning(push)
#pragma warning(disable: warning-code) //4996 for _CRT_SECURE_NO_WARNINGS equivalent
// deprecated code here
#pragma warning(pop)
따라서 때때로 유해 할 수있는 모든 경고를 비활성화하지 않습니다.
다중 플랫폼 프로젝트에서 작업하므로 _s 함수를 사용할 수 없으며 Visual Studio 특정 코드로 내 코드를 오염시키고 싶지 않습니다.
내 해결책은 Visual Studio 프로젝트에서 경고 4996을 비활성화하는 것입니다. 프로젝트-> 속성-> 구성 속성-> C / C ++-> 고급-> 특정 경고 비활성화로 이동하여 값 4996을 추가합니다
. mfc 및 / 또는 atl 라이브러리 (내 경우가 아님)도 사용하는 경우 mfc _AFX_SECURE_NO_DEPRECATE 및 atl _ATL_SECURE_NO_DEPRECATE를 포함하기 전에.
저는 Visual Studio 2003과 2005에서이 솔루션을 사용합니다.
ps Visual Studio 만 사용하는 경우 보안 템플릿 오버로드가 좋은 솔루션이 될 수 있습니다.
Secure Template Overloads를 사용할 수도 있습니다. 버퍼 크기 (정적 배열)를 쉽게 추론 할 수있는 모든 곳에서 안전하지 않은 호출을 안전한 호출로 대체하는 데 도움이됩니다.
다음을 추가하십시오.
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
그런 다음 _s 함수를 사용하여 나머지 경고를 직접 수정합니다.
@ [macbirdie] 및 @ [Adrian Borchardt] 답변의 조합입니다. 프로덕션 환경에서 매우 유용하다는 것이 입증되었습니다 (특히 크로스 플랫폼 컴파일 중에 기존 경고를 엉망으로 만들지 않음).
#if (_MSC_VER >= 1400) // Check MSC version
#pragma warning(push)
#pragma warning(disable: 4996) // Disable deprecation
#endif
//... // ...
strcat(base, cat); // Sample depreciated code
//... // ...
#if (_MSC_VER >= 1400) // Check MSC version
#pragma warning(pop) // Renable previous depreciations
#endif
경고 사례 별 경고의 경우 사례별로 수행하므로 어느 시점에서 기본값으로 복원하는 것이 좋습니다.
#pragma warning(disable: 4996) /* Disable deprecation */
// Code that causes it goes here
#pragma warning(default: 4996) /* Restore default */
이를 수행하는 가장 좋은 방법은 간단한 확인 및 평가입니다. 나는 보통 다음과 같이한다.
#ifndef _DEPRECATION_DISABLE /* One time only */
#define _DEPRECATION_DISABLE /* Disable deprecation true */
#if (_MSC_VER >= 1400) /* Check version */
#pragma warning(disable: 4996) /* Disable deprecation */
#endif /* #if defined(NMEA_WIN) && (_MSC_VER >= 1400) */
#endif /* #ifndef _DEPRECATION_DISABLE */
실제로 필요한 것은 다음과 같습니다.
#pragma warning(disable: 4996)
아직 나를 실망시키지 않았습니다. 도움이 되었기를 바랍니다
보안 검사를 비활성화 할 수 있습니다. 이동
Project -> Properties -> Configuration properties -> C/C++ -> Code Generation -> Security Check
and select Disable Security Check (/GS-)
You can define the _CRT_SECURE_NO_WARNINGS symbol to suppress them and undefine it to reinstate them back.
Another late answer... Here's how Microsoft uses it in their wchar.h
. Notice they also disable Warning C6386:
__inline _CRT_INSECURE_DEPRECATE_MEMORY(wmemcpy_s) wchar_t * __CRTDECL
wmemcpy(_Out_opt_cap_(_N) wchar_t *_S1, _In_opt_count_(_N) const wchar_t *_S2, _In_ size_t _N)
{
#pragma warning( push )
#pragma warning( disable : 4996 6386 )
return (wchar_t *)memcpy(_S1, _S2, _N*sizeof(wchar_t));
#pragma warning( pop )
}
참고URL : https://stackoverflow.com/questions/119578/disabling-warnings-generated-via-crt-secure-no-deprecate
'Programing' 카테고리의 다른 글
getActionBar 메소드를 수정하는 방법은 java.lang.NullPointerException을 생성 할 수 있습니다. (0) | 2020.10.26 |
---|---|
node_modules를 제외하지 않는 Webpack (0) | 2020.10.26 |
MySQL에서 인덱스 크기를 알아내는 방법 (0) | 2020.10.26 |
지도 작업에서 튜플 풀기 (0) | 2020.10.26 |
MongoDB는 서버 충돌 후 시작되지 않습니다. (0) | 2020.10.26 |