_crt_secure_no_deprecate를 통해 생성 된 경고를 비활성화합니다
-
02-07-2019 - |
문제
경고를 비활성화하는 가장 좋은 방법은 무엇입니까? _CRT_SECURE_NO_DEPRECATE
이를 통해 쉽게 복직하고 Visual Studio 버전에서 작동합니까?
해결책
소스 코드를 오염시키지 않으려면 _CRT_SECURE_NO_WARNINGS
"Project"-> "Properties"-> "구성 속성"-> "C/C ++"-> "Preprocessor"-> "Preprocessor 정의"를 통해 프로젝트 설정의 기호.
또한이 경고를 생성하는 헤더 파일을 포함하기 직전에 정의 할 수 있습니다. 이와 같은 것을 추가해야합니다
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
그리고 작은 말에 따르면,이 경고가 무엇을 의미하는지 이해하고, MSVC보다 다른 컴파일러를 사용하지 않으려면 STRCPY 대신 더 안전한 버전의 기능을 사용하는 것을 고려하십시오.
다른 팁
사용하여 나타나는 곳에서 일시적으로 경고를 비활성화 할 수 있습니다.
#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 에서이 솔루션을 사용합니다.
추신 : Visual Studio 만 사용하는 경우 보안 템플릿 과부하가 좋은 솔루션이 될 수 있습니다.
당신은 또한 사용할 수 있습니다 보안 템플릿 과부하, 비 안전한 통화를 버퍼 크기 (정적 어레이)를 쉽게 추론 할 수있는 보안 통화로 교체하는 데 도움이됩니다.
다음을 추가하기 만하면됩니다.
#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)
아직 실패하지 않았습니다. 도움이 되었기를 바랍니다
보안 점검을 비활성화 할 수 있습니다. 이동
프로젝트 -> 속성 -> 구성 속성 -> C/C ++ -> 코드 생성 -> 보안 검사
보안 검사 비활성화 (/gs-)를 선택하십시오.
_crt_secure_no_warnings 기호를 정의하여 그들을 억제하고 다시 정의 할 수 있습니다.
또 다른 늦은 답변 ... 여기에 Microsoft를 사용하는 방법은 다음과 같습니다. wchar.h
. 그들은 또한 비활성화합니다 경고 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 )
}