Pregunta

¿Cuál es la mejor manera de desactivar las advertencias generadas a través de _CRT_SECURE_NO_DEPRECATE ¿Eso permite restablecerlos con facilidad y funcionará en todas las versiones de Visual Studio?

¿Fue útil?

Solución

Si no desea contaminar su código fuente (después de todo, esta advertencia solo se presenta con el compilador de Microsoft), agregue _CRT_SECURE_NO_WARNINGS símbolo a la configuración de su proyecto a través de "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 comprender lo que significa esta advertencia y, tal vez, si no tiene la intención de utilizar otros compiladores que no sean MSVC, considere usar una versión más segura de las funciones, es decir.strcpy_s en lugar de strcpy.

Otros consejos

Puede desactivar las advertencias temporalmente en los lugares donde aparecen usando

#pragma warning(push)
#pragma warning(disable: warning-code) //4996 for _CRT_SECURE_NO_WARNINGS equivalent
// deprecated code here
#pragma warning(pop)

para no desactivar todas las advertencias, que en ocasiones pueden resultar perjudiciales.

Trabajo en un proyecto multiplataforma, por lo que no puedo usar la función _s y no quiero contaminar mi código con código específico de Visual Studio.
Mi solución es desactivar la advertencia 4996 en el proyecto de Visual Studio.vaya a Proyecto -> Propiedades -> Propiedades de configuración -> C/C++ -> Avanzado -> Deshabilitar advertencia específica y agregue el valor 4996.
si usa también la biblioteca mfc y/o atl (no es mi caso), defina antes de incluir mfc _AFX_SECURE_NO_DEPRECATE y antes de incluir atl _ATL_SECURE_NO_DEPRECATE.
Utilizo esta solución en Visual Studio 2003 y 2005.

PD.Si usa solo Visual Studio, las sobrecargas de plantillas seguras podrían ser una buena solución.

También puedes utilizar el Sobrecargas de plantillas seguras, le ayudarán a reemplazar las llamadas no seguras por otras seguras en cualquier lugar donde sea posible deducir fácilmente el tamaño del búfer (matrices estáticas).

Simplemente agregue lo siguiente:

#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1 

Luego corrija las advertencias restantes manualmente, utilizando las funciones _s.

Combinación de respuesta de @[macbirdie] y @[Adrian Borchardt].Lo que resulta muy útil en el entorno de producción (sin estropear las advertencias existentes anteriormente, 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

Para el caso de advertencia por advertencia, es aconsejable restaurarlo a sus valores predeterminados en algún momento, ya que lo hace caso por caso.

#pragma warning(disable: 4996) /* Disable deprecation */
// Code that causes it goes here
#pragma warning(default: 4996) /* Restore default */

La mejor manera de hacerlo es mediante una simple verificación 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

puedes desactivar el control de seguridad.ir a

Proyecto -> Propiedades -> Propiedades de configuración -> C/C++ -> Generación de código -> Comprobación de seguridad

y seleccione Desactivar comprobación de seguridad (/GS-)

Puede definir el símbolo _CRT_SECURE_NO_WARNINGS para suprimirlos y anular su definición para restablecerlos.

Otra respuesta tardía...Así es como Microsoft lo usa en su wchar.h.Observe que también desactivan 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 )
} 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top