Tengo una biblioteca de terceros que genera un montón de advertencias, incluso en/W3. ¿Hay alguna manera de decirle al compilador "deshabilitar C4244 para cualquier archivo incluido en este directorio o sus subdirectorios"? Por supuesto, no quiero deshabilitar la advertencia en nuestra propia base de código, ni quiero tener que rastrear cada inclusión posible y envolverla con #pragma warning(...
¿Puede desactivar advertencias de compilador (específicas) para cualquier encabezado incluido desde una ubicación específica?
Respuesta
odio a responder a mi propia pregunta aquí, pero me temo que la respuesta "correcta" en este caso es: es imposible.
Sí. Incluso he tratado de abusar del pre-procesador para generar una macro INCLUDE que deshabilita las advertencias, pero eso no parece posible también. La única salida para tener un resultado sensato, creo, es grep la salida de advertencia del compilador, pero por ahora solo estoy viviendo con todas las advertencias. –
En Visual Studio 2015 (al menos) hay un proyecto 'Propiedades/Todas las opciones/Deshabilitar advertencias específicas' que puede establecer. La CLI para eso es '/ wd4244'. En otros compiladores podría ser '/ nowarn: 4244' en su lugar. –
No estoy seguro de si usted quiso decir que no quiere para envolver sus declaraciones de inclusión con las directivas #pragma
o no quería perder tiempo rastreando la directiva correcta. Si es el último, entonces esto es lo que hice en el pasado:
#ifdef _MSC_VER
#pragma warning(disable : 4244)
#endif
#include "MyHeader.h"
#ifdef _MSC_VER
#pragma warning(default : 4244) /* Reset to default state */
#endif
Lo siento, fue lo primero. Sé cómo desactivar las advertencias a través de #pragma ya. – moswald
Esto debería funcionar. El compilador memoriza el pragma de advertencia que estaba en vigor cuando compiló la declaración. –
@Hans: Esto podría desactivar las advertencias generadas por MyHeader.h, pero no responde mi pregunta. No quiero buscar un par de cientos de archivos para las varias docenas de bibliotecas incluidas, y luego envolverlos con los #pragmas. – moswald
Puede intentar eliminar el proyecto de terceros de su ruta de inclusión. A continuación, cree un subdirector que tenga la misma estructura de dir y archivos de encabezado que el proyecto de terceros, de modo que todos los #includes ahora encuentren sus encabezados. Luego, en cada encabezado falso xxxx.h, configura el pragma e incluye el encabezado real xxxx.h, luego borra el pragma. Para evitar recursivamente incluir el mismo archivo, deberá agregar un directorio adicional al #include.
Personalmente, me gustaría ir a través de su proyecto y agregar el del pragma.
Usted puede poner banderas, por ejemplo, /wd4600
en VS Project Settings > Command-line Options
para decirle al compilador para suprimir específica Complier Warnings
Esto omite la parte sobre la que dice: "No quiero deshabilitar la advertencia en nuestra propia base de código". –
Probar:
//in wrapper_3rdParty.h
#pragma once
#pragma warning(push)
#pragma warning(disable : 4244)
#include "3rdParty.h"
#pragma warning(pop)
Luego, en el código, simplemente #include "wrapper_3rdParty.h"
lugar.
que maneja los problemas con default
comportamiento en la advertencia, y todas las insteances de su uso del paquete htat tienen la advertencia suprimida.
Para responder a todos sus comentarios en un solo lugar: la biblioteca era grande, y tendría que haber escrito docenas de estas. Estaba preguntando sobre un atajo. – moswald
- 1. desactivar advertencias específicas en gcc
- 2. Suprimir advertencias de compilador XCode específicas de línea
- 3. Cómo suprimir las advertencias para el archivo incluido desde el encabezado
- 4. Desactivar StyleCop para líneas específicas
- 5. Deshabilitar las advertencias del compilador por línea
- 6. ¿hay alguna forma de desactivar la optimización del compilador para una línea de código específica?
- 7. Ignorar advertencias específicas con PHP_CodeSniffer
- 8. Desactivar todas las advertencias gcc
- 9. descargar imágenes automáticamente desde cualquier ubicación URL
- 10. Delphi advertencias desactivar falla
- 11. MKMapItem con una ubicación específica
- 12. ¿Puede agregar advertencias de compilador personalizadas en Objective-C?
- 13. No se puede dejar de hormigas desde la generación de compilador de Sun advertencias API propietario
- 14. Desactivar las advertencias de sqlalchemy en nosetests
- 15. Asesoramiento de advertencias de Javadoc para etiquetas específicas
- 16. PHP encabezado de ubicación
- 17. encabezado de ubicación en una nueva pestaña
- 18. Ejecutar comando de shell en Clojure desde la ubicación específica
- 19. cómo desactivar estas advertencias PHP?
- 20. ¿Puede COPG de PostgreSQL leer CSV desde una ubicación remota?
- 21. Desactivar advertencias y errores en php/mysql
- 22. Cómo desactivar las advertencias de sangría JSLint?
- 23. ¿Cómo puedo desactivar las advertencias del compilador en Eclipse en base a un archivo específico?
- 24. postgresql: crear una base de datos en una ubicación específica
- 25. Guardar archivo cargado en una ubicación específica
- 26. nginx: auth_basic para todo excepto en una ubicación específica
- 27. Cambiar ubicación del encabezado GridView
- 28. Cómo suprimir compilador de advertencia para la función específica en VS2005 (VB.Net)
- 29. ¿Por qué este archivo de encabezado boost no está incluido?
- 30. ¿Se puede configurar Eclipse para desactivar las advertencias de los archivos fuente derivados?
Buena pregunta :) Me alegraría si pudiera desactivar las advertencias de los encabezados de Qt. –
@Vitor: estoy seguro de que NO tengo idea de lo que estás hablando. ;) – moswald
No estoy seguro de si un compilador puede hacerlo o no. Pero, en la práctica, puedes filtrar estas advertencias después de compilar. – czchen