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?

Foi útil?

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 )
} 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top