Acepto que es mejor eliminar todas las advertencias. Si recibes miles de advertencias, debes priorizar tus soluciones.
Comience configurando el compilador en el nivel de advertencia más bajo. Estas advertencias deberían ser las más importantes. Cuando estos sean fijos, incremente su nivel de advertencia y repita hasta llegar al nivel de advertencia más alto. Luego configure sus opciones de compilación para que las advertencias sean tratadas como errores.
Si encuentra una advertencia que sospecha que es seguro ignorar, investigue un poco para verificar su teoría. Solo entonces deshabilítelo y solo de la manera más mínima posible. La mayoría de los compiladores tienen directivas #pragma
que pueden deshabilitar/habilitar advertencias solo para una parte de un archivo. Aquí hay un ejemplo de Visual C++:
typedef struct _X * X; // from external header, not 64-bit portable
#pragma warning(push)
#pragma warning(disable: 4312) // 64-bit portability warning
X x = reinterpret_cast<X>(0xDDDDDDDD); // we know X not 64-bit portable
#pragma warning(pop)
Tenga en cuenta que esto solo deshabilita la advertencia de una sola línea de código. El uso de este método también le permite hacer búsquedas simples de texto de su código en el futuro para realizar cambios.
Alternativamente, generalmente puede deshabilitar una advertencia particular para un solo archivo o para todos los archivos. En mi humilde opinión esto es peligroso y solo debería ser un último recurso.
Quizás una pregunta mejor sería "¿Arreglas advertencias o las pragmas?" – ilitirit
Como nota al margen, sugiero leer el valioso libro ** Objective Oriented Reengineering Patterns **, de Demeyer et. Al. Alabama. ([libro electrónico gratuito disponible] (http://scg.unibe.ch/download/oorp/)) para aquellos que trabajan con códigos heredados. Sugiere priorizar los cambios y trabajar en la mayoría de los cambios más valiosos primero y de manera iterativa e incremental. Por lo tanto, la respuesta depende del cuadro de tiempo del proyecto y las prioridades, creo. –
Además, para gcc, siempre debería estar ejecutando al menos '-Wall'. Prefiero '-Wextra', y algunas veces' -pedantic' es incluso útil. –