¿Por qué Visual Studio 2013 emite un error C4996?

3 minutos de lectura

Avatar de usuario de Nikolai
Nicolás

En versiones anteriores de Visual Studio, el uso de funciones como _sleep o strncpy solo genera una advertencia. En la última versión, de repente es un error:

error inesperado

error C4996: ‘_sleep’: esta función o variable ha sido reemplazada por una biblioteca más reciente o una funcionalidad del sistema operativo. Considere usar Suspender en su lugar. Consulte la ayuda en línea para obtener detalles.

Sé que puedo deshabilitarlo agregando #pragma warning(disable: 4996) al comienzo del código, pero es extremadamente molesto que VS intente obligarme a usar otras funciones. ¿Hay alguna forma de desactivar este comportamiento?

Antes de que pregunte, “Tratar advertencias como errores” está deshabilitado, ¡y falla incluso si desactivo todas las advertencias!

  • posible duplicado del error C4996 recibido al compilar sqlite.c en Visual Studio 2013

    – DNS

    25 mayo 2014 a las 15:49

  • También podría usar un stdext::checked_array_iterator, pero parece no ser estándar.

    – jliv902

    28 de mayo de 2014 a las 14:19

  • _CRT_NONSTDC_NO_DEPRECATE me funcionó en VS 2017.

    –Nick Westgate

    12 de abril de 2018 a las 10:27

Aparentemente, los nuevos proyectos ahora habilitan la “comprobación de SDK” de forma predeterminada, lo que trata estas advertencias como errores. Para deshabilitarlo, vaya a las propiedades del proyecto -> Propiedades de configuración -> C/C++ -> General -> Comprobaciones de SDL -> No.

  • La desactivación de las comprobaciones de SDL no solucionó la advertencia de algunas funciones obsoletas de la API de Windows con las que me encontré, como GetVersionEx. Tuve que deshabilitar la advertencia 4996 específicamente para solucionarlos.

    – Nathan Reed

    25 de septiembre de 2014 a las 22:29


  • Wow, muchas gracias por el tipo que hizo esta pregunta y el que responde. Me solucionó el error

    – RaHuL

    6 abr 2021 a las 15:07


ingrese al principio del programa:

#pragma warning(disable : 4996)

y eso es.

  • Esto ya se mencionó en la pregunta de OP en 2013. No estoy seguro de cómo eso calificó como una respuesta en 2018

    – Tomas Weller

    16 de diciembre de 2020 a las 12:47


Avatar de usuario de Peter Tseng
Pedro Tseng

También puede deshabilitar números de advertencia específicos en C/C++ > Avanzado > Deshabilitar advertencias específicas.

Solo para agregar a esto, _CRT_NONSTDC_NO_DEPRECATE funcionó para mí en VS2019. _CRT_SECURE_NO_WARNINGS solo no me aclaro esto (tengo ambos definidos).

Similar a las otras respuestas, esto se puede agregar haciendo clic con el botón derecho en el proyecto en el Explorador de soluciones, luego yendo a Propiedades-> Propiedades de configuración-> C/C++-> Preprocesador-> Definiciones de preprocesador-> Editar… y luego agregando la línea _CRT_NONSTDC_NO_DEPRECATE.

Compilando todas las fuentes a las que me he referido:

Quite las advertencias seguras (_CRT_SECURE_NO_WARNINGS) de los proyectos de forma predeterminada en Visual Studio

Respuesta de kmcnamee sobre cómo usar use _CRT_SECURE_NO_WARNINGS

Vídeo que resolvió mi problema. https://www.youtube.com/watch?v=qWxGZLjwKL0

Aparentemente, Security Development Lifecycle (SDL) recomendó verificaciones que incluyen habilitar funciones adicionales de generación de código seguro y advertencias adicionales relevantes para la seguridad como errores.

Los pasos para solucionar este problema son:

1. Go to Project-> "your project name" Properties
2. Under Configuration Properties, go to C/C++
3. Under C/C++, go to Preprocessor 
4. Select Preprocessor Definitions and click on Edit from the dropdown menu
5. In the blank space fill out _CRT_SECURE_NO_WARNINGS

Proyecto ->propiedades de nombre_proyecto -> Propiedades de configuración -> C/C++ -> Preprocesador -> Definiciones de preprocesador -> Editar… agregar línea _CRT_SECURE_NO_WARNINGS

¿Ha sido útil esta solución?