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

195

¿Hay alguna manera de establecer de forma predeterminada para todos los proyectos que eliminan las advertencias seguras del precompilador que aparecen cuando se utilizan funciones como scanf (). Descubrí que puede hacerlo agregando una línea en la opción del proyecto o una #define _CRT_SECURE_NO_WARNINGSal comienzo del código.

Me encuentro creando repetidamente nuevos proyectos para resolver concursos de programación y es realmente molesto (y toma un tiempo valioso) agregar:

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif

Al comienzo del código, o para configurarlo en las opciones del precompilador cada vez que inicio un nuevo proyecto.

Juan martinez
fuente
2
Puede exportar una plantilla de proyecto con _CRT_SECURE_NO_WARNINGS definido.
BlueWanderer
Esa parece ser una buena solución. Lo estoy investigando. ¡Gracias!
Juan Martinez
3
olvidas el 1 al final #define _CRT_SECURE_NO_WARNINGS 1
Martijn van Wezel el
3
No se requiere @MartijnvanWezel 1 al final.
qqqqq
1
@qqqqq Forzará a ser verdad
Martijn van Wezel el

Respuestas:

286

Marque todos los proyectos deseados en el explorador de soluciones.

Presione Alt-F7 o haga clic derecho en el explorador de soluciones y seleccione "Propiedades"

Configuraciones: todas las configuraciones

Haga clic en la línea de Definiciones de preprocesador para invocar su editor

Elija Editar ...

Copie "_CRT_SECURE_NO_WARNINGS" en el cuadro blanco Definiciones de preprocesador en la parte superior.

ingrese la descripción de la imagen aquí

usuario2548100
fuente
10
Esto describe cómo agregarlo para un proyecto que creo que el OP ya sabe (aunque no está 100% claro). La pregunta clave es cómo agregarlo para que aparezca en todos los proyectos. Idealmente, ¿cómo se puede agregar a la macro% (PreprocessorDefinitions) para que se incluya en todas partes?
Rob Gilliam
Corregido a partir del 13 de enero de 2015.
Esto solo describe el primer paso. Una vez que haya configurado todo de la manera que lo necesita, también querrá exportar una plantilla de proyecto (consulte Cómo: Crear plantillas de proyecto para obtener instrucciones).
Inspectable
92

Puede haber sido porque todavía soy nuevo en VS y definitivamente nuevo en C, pero lo único que me permitió construir fue agregar

#pragma warning(disable:4996)

En la parte superior de mi archivo, esto suprimió el error C4996 que recibía con sprintf

Un poco molesto pero perfecto para mi pequeño código y, con mucho, el más fácil.

Lo leí aquí: https://msdn.microsoft.com/en-us/library/2c8f766e.aspx

Shaun314
fuente
55
Intenté todas las variaciones de #define que se muestran en esta página (con y sin el 1 al final) y solo el #pragma funcionó para mí. (Edición comunitaria VS2013) Estoy seguro de que me falta algo, pero en algún momento, solo necesitas que funcione para poder seguir adelante.
Spike0xff
Tenía exactamente lo mismo: se siente una mierda pero al final del día, bueno, funciona, @ Spike0xff
Shaun314
2
Puedo confirmar que _CRT_SECURE_NO_WARNINGS no funciona en VC ++ 2015 pero arriba funciona. ¡Gracias!
Shital Shah
@ShitalShah ¿Su confirmación se basa en experimentos personales o alguna documentación oficial de Microsoft?
qqqqq
1
@bri: configurar incondicionalmente el valor predeterminado puede tener efectos no deseados. Realmente querías restaurar el comportamiento a lo que era antes. Para hacer eso, use #pragma warning(push)/ en su#pragma warning(pop) lugar.
Inspeccionable
29

No automáticamente, no. Puede crear una plantilla de proyecto como BlueWandered sugirió o crear una hoja de propiedades personalizada que puede usar para sus proyectos actuales y futuros.

  1. Abra el Administrador de propiedades (Ver-> Administrador de propiedades)
  2. En el Administrador de propiedades, haga clic derecho en su proyecto y seleccione "Agregar nueva hoja de propiedades del proyecto"
  3. Déle un nombre y créelo en un directorio común. La hoja de propiedades se agregará a todos los objetivos de compilación.
  4. Haga clic derecho en la nueva hoja de propiedades y seleccione "Propiedades". Esto abrirá las propiedades y le permitirá cambiar la configuración tal como lo haría si las estuviera editando para un proyecto.
  5. Vaya a "Propiedades comunes-> C / C ++ -> Preprocesador"
  6. Edite la configuración "Definiciones de preprocesador" y agregue _CRT_SECURE_NO_WARNINGS.
  7. Ahorra y listo.

Ahora, cada vez que cree un nuevo proyecto, agregue esta hoja de propiedades así ...

  1. Abra el Administrador de propiedades (Ver-> Administrador de propiedades)
  2. En el Administrador de propiedades, haga clic derecho en su proyecto y seleccione "Agregar hoja de propiedades del proyecto existente"

El beneficio aquí es que no solo obtienes un solo lugar para administrar configuraciones comunes, sino que cada vez que cambias las configuraciones se propagan a TODOS los proyectos que lo usan. Esto es útil si tiene muchas configuraciones _CRT_SECURE_NO_WARNINGSo bibliotecas como Boost que desea usar en sus proyectos.

Capitán Obvio
fuente
Eso es genial. No puedo creer que nunca descubrí el administrador de la propiedad hasta hoy.
James Johnston el
20

Todas las soluciones aquí no funcionaron en mi VS2013, sin embargo, puse #define _CRT_SECURE_NO_WARNINGSel stdafx.h justo antes de que #pragma oncese eliminaran todas las advertencias. Nota: Solo codifico con fines de creación de prototipos para apoyar mi investigación, así que asegúrese de comprender las implicaciones de este método al escribir su código.

Espero que esto ayude

PDF417
fuente
1
Donde esta stdafx.hubicado
SomethingSomething
1
Para aquellos que no saben, debe definirse como 1, así: #define _CRT_SECURE_NO_WARNINGS 1
kirk.burleson
11

mis dos centavos para VS 2017:

Puedo confirmar que funciona en stdafx.h en ambos estilos:

una)

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1 
#define _WINSOCK_DEPRECATED_NO_WARNINGS 1 

si)

#define _CRT_SECURE_NO_WARNINGS 1 
#define _WINSOCK_DEPRECATED_NO_WARNINGS 1 
#pragma once

(He agregado otra definición para llamadas de red MSDN ...) Por supuesto que prefiero a).

Puedo confirmar que: #define _CRT_SECURE_NO_WARNINGS (sin un valor) NO FUNCIONA.

PD: el punto real es poner estas definiciones ANTES de las declaraciones de funciones, es decir, antes *.

ingconti
fuente
Funciona en Visual Studio 2010 también.
ebyrob
8

simplemente copie " _CRT_SECURE_NO_WARNINGS " y péguelo en proyectos-> propiedades-> c / c ++ -> preprocesador-> definiciones de preprocesador, haga clic en Aceptar. Funcionará

Leninkumar
fuente
0

Si su proyecto no usa stdafx.h, puede poner las siguientes líneas como las primeras líneas en su archivo .cpp y la advertencia del compilador debería desaparecer, al menos para mí en Visual Studio C ++ 2008.

#ifdef _CRT_SECURE_NO_WARNINGS
#undef _CRT_SECURE_NO_WARNINGS
#endif
#define _CRT_SECURE_NO_WARNINGS 1

Está bien tener comentarios y líneas en blanco delante de ellos.

R Sahu
fuente
0

Aunque puede agregar _CRT_SECURE_NO_WARNINGS a las propiedades de su proyecto, la forma más fácil es usar stdafx.h para cualquier tipo de advertencia y deshabilitación de errores, solo asegúrese de colocar la siguiente línea (y similar) ANTES

#pragma once

Además, no es necesario definir un valor (es decir, "1") para _CRT_SECURE_NO_WARNINGS siempre que esté definido. Entonces debería verse así:

#define _CRT_SECURE_NO_WARNINGS 

#pragma once
Michael Haephrati
fuente
Esto es incorrecto. El orden no hace la diferencia. En absoluto. Supongo que nunca explicaste por qué esto era necesario, porque no hay razón.
Inspectable
Esto no es una cuestión de "orden", solo verifique dos veces: si coloca #define _CRT_SECURE_NO_WARNINGS después de #pragma una vez, ¡aún obtendrá este error!
Michael Haephrati
El comportamiento de #pragma onceestá definido por la implementación, pero sigue el estándar de facto común en Visual Studio. Si hace una diferencia para usted, ya sea que haya definido el símbolo del preprocesador delante del pragma o después de él, entonces tiene una configuración de proyecto interrumpida (esto supone, indebidamente, que está equiparando "encabezados precompilados" y "stdafx.h " ).
Inspeccionable
¿Cuál es incluso el significado de "configuración de proyecto rota"? Creé un nuevo proyecto Win32 y probé ambos escenarios.
Michael Haephrati
Consulte la documentación oficial para conocer los requisitos reales para usar este símbolo de preprocesador.
Inspectable