문제

경고를 비활성화하는 가장 좋은 방법은 무엇입니까? _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 )
} 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top