Desactivar avisos gerados através _CRT_SECURE_NO_DEPRECATE
-
02-07-2019 - |
Pergunta
O que é a melhor maneira de desativar os avisos gerados via _CRT_SECURE_NO_DEPRECATE
que lhes permite ser reintegrado com facilidade e vai funcionar em todas as versões do Visual Studio?
Solução
Se você não quer poluir seu código-fonte (depois de todos os presentes neste aviso única com compilador Microsoft), adicione símbolo _CRT_SECURE_NO_WARNINGS
para as configurações do projeto através de "Projeto" -> "Propriedades" -> "Propriedades de Configuração" -> "C / C ++" -> "Preprocessor." -> "definições de pré-processador"
Além disso, você pode defini-lo pouco antes de você incluir um arquivo de cabeçalho que gera este aviso. Você deve adicionar algo como isto
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
E apenas uma pequena observação, certifique-se de compreender o que este aviso significa, e talvez, se você não pretende usar outros compiladores que MSVC, considere usar a versão mais segura das funções ou seja strcpy_s vez de strcpy.
Outras dicas
Você pode desativar os avisos temporariamente em lugares onde eles aparecem usando
#pragma warning(push)
#pragma warning(disable: warning-code) //4996 for _CRT_SECURE_NO_WARNINGS equivalent
// deprecated code here
#pragma warning(pop)
para que você não desativar todos os avisos, que podem ser prejudiciais às vezes.
i trabalhar em um projeto multi-plataforma, por isso não posso usar _s função e eu não quero poluir o meu código com o código de estúdio específica visual.
minha solução é desativar o aviso de 4996 no projeto visual studio. ir para Projeto -> Propriedades -> Configuração propriedades -> C / C ++ -> Avançado -> advertência específica Disable adicionar o valor de 4996.
se você usar também o MFC e / ou a biblioteca ATL (não meu caso) definir antes incluem _AFX_SECURE_NO_DEPRECATE mfc e antes incluem atl _ATL_SECURE_NO_DEPRECATE.
i usar esta solução através visual studio 2003 e 2005.
P.S. Se você usar apenas visual studio sobrecargas modelo seguras poderia ser uma boa solução.
Você também pode usar o seguros modelo sobrecargas , eles vão ajudá-lo a substituir as chamadas não seguros com os seguros em qualquer lugar é possível tamanho do buffer facilmente deduzir (matrizes estáticos).
Basta adicionar o seguinte:
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
Em seguida, fixar os avisos restantes à mão, usando as funções _s.
A combinação de @ [macbirdie] e @ [Adrian Borchardt] resposta. O que prova ser muito útil no ambiente de produção (não bagunçar aviso previamente existente, especialmente durante a compilação multi-plataforma)
#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
Para a advertência a caso aviso, É sábio para restaurá-lo para o padrão em algum momento, desde que você está fazendo isso em uma base caso a caso.
#pragma warning(disable: 4996) /* Disable deprecation */
// Code that causes it goes here
#pragma warning(default: 4996) /* Restore default */
A melhor maneira de fazer isso é por uma simples verificação e avaliar. Eu costumo fazer algo parecido com isto:
#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 */
Tudo o que é realmente necessário é o seguinte:
#pragma warning(disable: 4996)
Não me falhou ainda; Espero que isso ajude
Você pode desativar verificação de segurança. vá para
Project -> Propriedades -> Propriedades de Configuração -> C / C ++ -> Geração de código -> Verificação de Segurança
e selecione Desabilitar Verificação de Segurança (/ GS -)
Você pode definir o símbolo _CRT_SECURE_NO_WARNINGS suprimi-los e undefine-lo para reintegrá-los de volta.
Outra resposta tarde ... Veja como a Microsoft usa-lo em sua wchar.h
. Warning Aviso eles também desativar 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 )
}