c++ - solo - powershell advertencia de seguridad
Deshabilitar advertencias generadas mediante_CRT_SECURE_NO_DEPRECATE (10)
Combinación de @ [macbirdie] y @ [Adrian Borchardt] respuesta. Lo que demuestra ser muy útil en el entorno de producción (no estropear la advertencia previamente existente, especialmente durante la compilación multiplataforma)
#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
¿Cuál es la mejor manera de desactivar las advertencias generadas a través de _CRT_SECURE_NO_DEPRECATE
que les permite restablecerse con facilidad y funcionarán en todas las versiones de Visual Studio?
La mejor manera de hacerlo es mediante un simple control y evaluación. Normalmente hago algo como esto:
#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 */
Todo lo que realmente se requiere es lo siguiente:
#pragma warning(disable: 4996)
No me ha fallado todavía; Espero que esto ayude
Otra respuesta tardía ... Así es como Microsoft lo usa en su wchar.h
. Observe que también desactivan la advertencia 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 )
}
Para el caso de advertencia por advertencia, es conveniente restaurarlo a la configuración predeterminada en algún momento, ya que lo está haciendo caso por caso.
#pragma warning(disable: 4996) /* Disable deprecation */
// Code that causes it goes here
#pragma warning(default: 4996) /* Restore default */
Puede definir el símbolo _CRT_SECURE_NO_WARNINGS para suprimirlos y no definirlos para restablecerlos.
Puede desactivar las advertencias temporalmente en los lugares donde aparecen mediante el uso de
#pragma warning(push)
#pragma warning(disable: warning-code) //4996 for _CRT_SECURE_NO_WARNINGS equivalent
// deprecated code here
#pragma warning(pop)
para que no desactive todas las advertencias, que a veces pueden ser perjudiciales.
Si no quiere contaminar su código fuente (después de todo, esta advertencia solo se presenta con el compilador de Microsoft), agregue el símbolo _CRT_SECURE_NO_WARNINGS
a la configuración de su proyecto mediante "Proyecto" -> "Propiedades" -> "Propiedades de configuración" -> "C / C ++ "->" Preprocesador "->" Definiciones de preprocesador ".
También puede definirlo justo antes de incluir un archivo de encabezado que genere esta advertencia. Deberías agregar algo como esto
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
Y solo un pequeño comentario, asegúrese de entender lo que significa esta advertencia, y tal vez, si no tiene la intención de utilizar otros compiladores que MSVC, considere usar una versión más segura de funciones, es decir, strcpy_s en lugar de strcpy.
También puede utilizar las sobrecargas de plantillas seguras , que lo ayudarán a reemplazar las llamadas no seguras por otras seguras donde sea posible deducir fácilmente el tamaño del búfer (matrices estáticas).
Solo agregue lo siguiente:
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
Luego arregle las advertencias restantes a mano, usando las funciones _s.
Trabajo en un proyecto multiplataforma, por lo que no puedo usar la función _s y no quiero contaminar mi código con el código específico de Visual Studio.
mi solución es desactivar la advertencia 4996 en el proyecto de estudio visual. vaya a Proyecto -> Propiedades -> Propiedades de configuración -> C / C ++ -> Avanzado -> Deshabilitar advertencia específica agregue el valor 4996.
si también usa la biblioteca mfc y / o atl (no es mi caso) defina antes incluir mfc _AFX_SECURE_NO_DEPRECATE y antes incluya atl _ATL_SECURE_NO_DEPRECATE.
Utilizo esta solución en Visual Studio 2003 y 2005.
ps si usa solo Visual Studio, las sobrecargas de plantillas seguras podrían ser una buena solución.
puede deshabilitar la comprobación de seguridad. ir
Proyecto -> Propiedades -> Propiedades de configuración -> C / C ++ -> Generación de código -> Comprobación de seguridad
y seleccione Deshabilitar comprobación de seguridad (/ GS-)