Pregunta

He trabajado en muchos proyectos donde otros me han dado código para actualizar. La mayoría de las veces lo compilo y obtengo más de 1,000 advertencias de compilación. Cuando veo advertencias del compilador me hacen sentir sucio, así que mi primera tarea es limpiar el código y eliminarlos a todos. Por lo general, encuentro alrededor de una docena de problemas como variables no inicializadas como.

No entiendo por qué las personas los dejan y no tienen compilaciones perfectamente limpias sin advertencias. ¿Me estoy perdiendo de algo? ¿Hay alguna razón válida para dejarlos? ¿Alguna historia de terror para compartir?

¿Fue útil?

Solución

Limpiaría cualquier advertencia. Incluso los que sabe que son inofensivos (si existe tal cosa) le darán una mala impresión a quien compile el código.

Es uno de los "malolientes" signos que buscaría si tuviera que trabajar en el código de otra persona.

Si no se trata de errores reales o posibles problemas futuros, sería un signo de descuido

Otros consejos

Límpielos, incluso si no indican un problema real. De lo contrario, si aparece una advertencia de que indica un problema real, no lo verá a través de todo el ruido.

En mi trabajo, la configuración del compilador para tratar las advertencias como errores está activada. Entonces, no hay advertencias, o no se compilará :)

Estoy de acuerdo en que es mejor eliminar todas las advertencias. Si recibe miles de advertencias, debe priorizar sus soluciones.

Comience a configurar su compilador al nivel de advertencia más bajo. Estas advertencias deberían ser las más importantes. Cuando se arreglen, incremente su nivel de advertencia y repita hasta alcanzar el nivel de advertencia más alto. Luego configure sus opciones de compilación de modo que las advertencias se traten como errores.

Si encuentra una advertencia que sospecha que es segura 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 para solo 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 para una sola línea de código. El uso de este método también le permite realizar búsquedas de texto simples de su código en el futuro para realizar cambios.

Alternativamente, 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.

Límpielos si es posible . Sin embargo, en una base de código multiplataforma / compilador múltiple (he trabajado en una que compiló en 7 sistemas operativos diferentes con 6 compiladores diferentes) eso no siempre es posible. He visto casos en los que el compilador está simplemente mal (HP-UX aCC en Itanium, te estoy mirando), pero eso es ciertamente raro. Como otros señalan, puede deshabilitar la advertencia en tal situación.

Muchas veces, lo que es una advertencia en esta versión del compilador puede convertirse en un error en la próxima versión (cualquiera que actualice de gcc 3.xa 4.x debería estar familiarizado con eso), así que límpielo ahora.

Algunos compiladores emitirán advertencias realmente útiles que se convertirán en problemas bajo ciertas circunstancias: Visual C ++ 2005 y 2008 pueden advertirle sobre problemas de 64 bits, lo cual es un GRAN beneficio hoy en día. Si tiene planes de migrar a 64 bits, solo limpiar ese tipo de advertencias reducirá drásticamente el tiempo de puerto.

Hay algunas instancias en las que dejaré advertencias en el código, o donde no sea factible limpiarlas (aunque elimino las que puedo). Por ejemplo:

  • Si tiene algo en lo que está trabajando y sabe que necesita más trabajo / atención, dejar una advertencia para indicar que esto puede ser apropiado
  • Si está compilando C ++ con / clr, hay varias advertencias sobre cosas que hacen que se genere código nativo; puede ser engorroso suprimir todas estas advertencias cuando la base de código no se puede cambiar funcionalmente
  • Limpiar las advertencias cuando no comprende lo que hace la solución. Lo hice un par de veces con la advertencia de PC-Lint, y terminé introduciendo errores. Si no sabe cuál es el efecto exacto del cambio (p. Ej .: modelos de estilo C para eliminar las advertencias), NO lo haga. Resolver la advertencia, o dejar el código solo es mi consejo.

De todos modos, esas son las instancias fuera de mi cabeza donde dejar las advertencias podría ser apropiado.

La peor parte es que cuando escribes código nuevo, es difícil saber si accidentalmente has introducido más advertencias, ya que hay tantas que simplemente las ignoras de todos modos.

El problema con limpiarlos todos es que lleva tiempo que puede o no tener. Pero sí, generalmente debe limpiar tantos como pueda.

Dejar advertencias en tu código porque no tienes tiempo para arreglarlas es como no cepillarte los dientes porque no tienes suficiente tiempo en la mañana. Es una cuestión básica de código de higiene.

Siempre limpie sus advertencias. Si tiene un caso específico en el que sabe que la advertencia está bien, suprímala solo para esa instancia.

Si bien algunas advertencias pueden ser benignas, la mayoría significa un problema real con el código.

Si no limpia todas sus advertencias, la lista de advertencia seguirá creciendo y los casos de problemas reales se perderán en un mar de ruido de advertencia.

Una de las características de un programador realmente bueno es que el código incorrecto les da náuseas.

Me esfuerzo por tener todo mi código no solo limpio del compilador, sino también estar limpio dentro de mi IDE establecido en un nivel bastante exigente. A veces tendré que suprimir una instancia de advertencia si conozco mejor que la herramienta, pero al menos eso también sirve como documentación.

Siempre habilito todas las advertencias y luego configuro mi proyecto para que deje de construir si hay alguna advertencia.

Si hay advertencias, debe verificar cada una para asegurarse de que no haya ningún problema. Hacer esto una y otra vez es una pérdida de tiempo. No hacer esto implicará errores que aparecerán en tu código.

Hay formas de eliminar una advertencia (por ejemplo, #pragma argsused).

Deje que el compilador haga el trabajo.

He trabajado con varios sistemas integrados en los que las advertencias provocarán inestabilidad, bloqueos o daños en la memoria. A menos que sepa que la advertencia es inocua, debe tratarse.

Las advertencias son y deben tratarse como errores. Si no puede codificar lo suficientemente bien como para deshacerse de sus advertencias, entonces probablemente no debería estar codificando. En mi grupo tomamos la decisión de forzar todas las advertencias a errores. Termina esta discusión por completo y, en mi humilde opinión, mejora la calidad del código.

No me gustan las advertencias. Los elimino lo más posible.
A veces, cuando estoy bajo presión para terminar el trabajo, dejo algunos de ellos. Aunque rara vez los dejo. Me siento como tú, sucio si queda algo.

La base de código en la que trabajo tiene más de 4000 advertencias. Algunos de ellos son problemas legítimos. Nunca se nos da tiempo para entrar y arreglarlos, ni refactorizar otras cosas rotas ... En parte, esto se debe a que el código es tan antiguo que es anterior a C ++ estandarizado. Solo podemos compilar en VC ++ 6.

Limpie siempre todas las advertencias o suprímalas explícitamente si es necesario. La configuración predeterminada para las advertencias debe ser lo más alta posible al compilar (nivel 4 en VS, por ejemplo).

Mi jefe que creó un código que ahora mantengo. Utiliza banderas compiladoras para ocultar sus advertencias de depricación.

Cuando tengo tiempo, reviso y limpio lo que puedo.

Intento compilar código con un nivel bastante alto de advertencias y limpiarlas todas, excepto la "comparación firmada / no firmada". advertencias, que estoy seguro de que debería solucionar, pero nunca me pueden molestar.

Versión corta: en g ++ utilizo " -Wextra -Wno-sign-compare " y deshacerse de todos los mensajes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top