¿Cuál es la mejor manera de desactivar las advertencias generadas a través del _CRT_SECURE_NO_DEPRECATE
que les permite restablecerse con facilidad y funcionan en todas las versiones de Visual Studio?Inhabilitación de advertencias generadas a través de _CRT_SECURE_NO_DEPRECATE
Respuesta
Si no quiere contaminar su código fuente (después de todo este aviso presenta solo el compilador de Microsoft), agregue el símbolo _CRT_SECURE_NO_WARNINGS
a la configuración del 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 genera esta advertencia. Usted debe agregar algo como esto
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
Y sólo una pequeña observación, asegúrese de que entiende lo que esta advertencia significa, y tal vez, si usted no tiene intención de utilizar otros compiladores de MSVC, considere el uso de la versión más segura de funciones, es decir, strcpy_s en lugar de strcpy.
Puede definir el símbolo _CRT_SECURE_NO_WARNINGS para suprimirlos y no definirlos para volver a restaurarlos.
También puede usar el Secure Template Overloads, 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).
Apenas añada el siguiente:
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
luego fijar las advertencias restantes a mano, mediante el uso de las funciones _S.
trabajo en un proyecto multiplataforma, así 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 desactiva la advertencia 4996 en el proyecto de Visual Studio. vaya a Proyecto -> Propiedades -> Propiedades de configuración -> C/C++ -> Avanzado -> Deshabilitar advertencia específica agregue el valor 4996.
si usa también la biblioteca mfc y/o atl (no es mi caso) definir antes de incluir mfc _AFX_SECURE_NO_DEPRECATE y antes incluyen atl _ATL_SECURE_NO_DEPRECATE.
uso esta solución en Visual Studio 2003 y 2005.
p.s. si usa solo Visual Studio, las sobrecargas de plantillas seguras podrían ser una buena solución.
Las funciones '* _s' no son específicas de Microsoft. Se conocen como interfaces Bounds Checking y forman parte del estándar C/C++. Ver [ISO/IEC TR 24772] (http://www.iso.org/iso/catalogue_detail.htm?csnumber=41542). La gente de Glibc decidió no implementarlos. – jww
"... y no quiero contaminar mi código con el código específico de Visual Studio" - ¿Por qué no usar las funciones más seguras y evitar los errores de seguridad? En Unix y Linux, puede proporcionar un contenedor que realice la comprobación encuadernada que debería estar haciendo de todos modos, y luego llamar a la función estándar de Unix o Linux. *** Si *** no está realizando la verificación encuadernada, entonces realmente necesita *** estas funciones para evitar los problemas con su código (al menos en Windows). – jww
Usted puede desactivar temporalmente las advertencias en lugares donde aparecen utilizando
#pragma warning(push)
#pragma warning(disable: warning-code) //4996 for _CRT_SECURE_NO_WARNINGS equivalent
// deprecated code here
#pragma warning(pop)
por lo que no desactivar todas las advertencias, que pueden ser perjudiciales a veces.
La mejor manera de hacerlo es mediante un simple control y evaluación. Yo suelo hacer 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 necesita es la siguiente:
#pragma warning(disable: 4996)
no me ha fallado todavía; Espero que esto ayude
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 */
Combinación de @ [macbirdie] y @ [Adrian Borchardt] respuesta. Que resulta ser muy útil en el entorno de producción (no echar a perder 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
puede desactivar control de seguridad. ir a
Proyecto -> Propiedades - Propiedades> Configuración -> C/C++ -> Generación de código -> Control de seguridad
y seleccione Desactivar Control de seguridad (/ GS)
Otra respuesta tardía .. Así es como Microsoft lo usa en su wchar.h
. Tenga en cuenta que también desactivar Warning 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)
}
- 1. Inhabilitación en línea de Firefox Spellcheck?
- 2. ¿Puedo exportar páginas html generadas desde el sitio web ASP.NET a través de Visual Studio?
- 3. linq a las entidades generadas sql
- 4. Inhabilitación de los botones de opción con jQuery
- 5. Backbone.js - Inhabilitación temporal (eventos en) Ver
- 6. Inhabilitación recursiva de todos los elementos secundarios de un elemento
- 7. Agregar DataAnnontations a las clases parciales generadas
- 8. conversión de advertencias a errores en MATLAB
- 9. Advertencias de recuento en Python 2.4
- 10. Ejecución de pruebas de nariz generadas
- 11. VisualStateManager y las transiciones generadas
- 12. Suprimir las advertencias DBML de LINQ a SQL
- 13. rails has_many: a través de has_many: a través de
- 14. Visualización de imágenes generadas dinámicamente en Yesod
- 15. Activación de advertencias de migración
- 16. ASP.NET MVC URL de imagen generadas dinámicamente
- 17. Prevención de advertencias de fsockopen
- 18. advertencias de iphone de armv7
- 19. Existe la posibilidad de pasar incluye a través de -isistema al usar qmake
- 20. ¿Capturas de pantalla web generadas por servidor?
- 21. Prefijo de las clases generadas por JAXB
- 22. Maven - cómo manejar clases generadas
- 23. lista de advertencias de IntelliJ
- 24. Ventana de advertencias de Resharper
- 25. Django e imágenes generadas dinámicamente
- 26. Inhabilitación de la validación de Hibernate en guardar/actualizar con Hibernate 3.6.0.Final
- 27. Cómo eliminar advertencias externas de lib/terceros en GCC
- 28. ¿Debo emitir advertencias a STDERR o STDOUT?
- 29. Linq advertencias
- 30. Advertencias de Resharper con MVVM
Con el C11 y C++ 11 especificaciones, usted debe utilizar las versiones _S de las rutinas de manipulación de cadenas, a través de cualquier compilador compatible. –
@PaulWhitehurst: No, solo están en extensiones opcionales. – Deduplicator