Estoy leyendo el manual de gcc en este momento, especialmente la parte sobre banderas de advertencia/error. Después de leer la parte sobre la bandera de -extra, me pregunto si es útil en absoluto. Parece que se queja de cosas que parecen ser más bien subjetivas o una cuestión de gusto. No soy tan experimentado con gcc, solo lo uso de vez en cuando para algunos proyectos pequeños en la universidad, entonces para todos los C/C++ experimentados (o para cualquier idioma que uses gcc), ¿cuál es el trato con -Wextra?-Wextra ¿qué tan útil es realmente?
Respuesta
-Wextra
, entre otras cosas implica -Wtype-limits
:
Advertir cuando una comparación siempre es verdadera o siempre es falsa debido al rango limitado del tipo de datos, pero no avisa de expresiones constantes . Por ejemplo, advertir si una variable sin signo es comparado con cero con '<' o '> ='. Esta advertencia también está habilitada por -Wextra.
Encuentro esto realmente útil.
Normalmente agrego -Wno-sign-compare
y -Wno-unused-parameter
para eliminar el ruido.
El implícita -Wuninitialized
(con la opción -O2
) ha sido muy útil para mí, pero añadiendo inicialmente a su base de código puede ser un poco intimidante. Una forma de hacer frente a esto es agregar dos macros (que parecen un poco extraño: el signo igual es intencional):
#define ELIMINATE_GCC_WARNING = 0 // used to remove nuisance warnings
#define UNCHECKED_GCC_WARNING = 0 // not yet verified
A continuación, se puede eliminar rápidamente las advertencias de gcc y obtener una compilación limpia utilizando, por ejemplo:
int foo UNCHECKED_GCC_WARNING;
Luego, como paso opcional, retroceda y compruebe estas adiciones, y cámbielas una por una a ELIMINATE_GCC_WARNING. Esto puede ser lento. Pero me sorprendería si no encontraras algunos errores existentes.
Consulte http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html.
Por lo tanto, no solo es útil para la comparación 'siempre verdadera' (-Wsign-compare) sino que también identifica otros problemas de compilación. Lo encuentro útil a menudo.
- 1. ¿Para qué sirve la memorización y realmente es tan útil?
- 2. ¿Qué tan útil es Response.IsClientConnected?
- 3. ¿Es MVVM realmente útil?
- 4. ¿Qué tan útil es C#? ¿operador?
- 5. PHP Mcrypt, ¿qué tan seguro es realmente?
- 6. ¿Es realmente útil el ORM (Linq, Hibernate ...)?
- 7. ¿Qué tan útil es una implementación de MVC "pura"?
- 8. ¿Es realmente útil el protect_from_forgery de Rails?
- 9. Integración de PayPal (IPN): ¿qué tan posible es REALMENTE?
- 10. ¿Qué tan importante es deshacerse de una fuente realmente?
- 11. Código fuente VB6 realmente útil
- 12. ¿Doctrine realmente es tan lento que PDO?
- 13. E_NOTICE: ¿Cuán útil es REALMENTE reparar cada una?
- 14. ¿Qué tan útil sería heredar constructores en C++?
- 15. Frijoles ... ¿qué es realmente
- 16. ¿Qué es realmente awakeFromNib?
- 17. ¿Qué es realmente $ RPM_BUILD_ROOT?
- 18. ¿Qué tan único es LINQ?
- 19. ¿Qué tan único es XAML?
- 20. ¿Es realmente tan costosa la secuencia exe ejecutable de Unix?
- 21. ¿La conversión explícita de C++ es realmente tan mala?
- 22. ¿Qué tan bueno es SecRandomCopyBytes?
- 23. ¿Qué tan estable es NSubstitute?
- 24. REALMENTE simple sitio web - ¿Qué tan básico puede ir?
- 25. ¿Qué tan útil es el encabezado X-Frame-Options para proteger contra el encuadre malicioso?
- 26. ¿Qué tan útil es PHP CodeSniffer? Code Standards Enforcement en general?
- 27. ¿Qué tan importantes son realmente los patrones de diseño?
- 28. ¿es smartGWT realmente tan lento como su escaparate?
- 29. Optimización de código F # o es realmente tan lenta?
- 30. ¿La indexación de Data.Vector.Unboxed.Mutable.MVector es realmente tan lenta?
Encuentro '-Wno-unused-parameter' útil especialmente cuando el código fuente viejo cambia con el paso de los años, a veces los valores terminan siendo pasados por funciones anidadas que ni siquiera se usan. Sugerir definir UNUSED. '#define SIN USAR (x) UNUSED_ ## x __attribute __ ((__ __ no utilizado))' A continuación, se puede envolver argumentos como este ... 'void func (int a, int SIN USAR (b)) {... } ' También es bueno que si el argumento necesita ser utilizado más adelante, GCC no permitirá que esto suceda sin eliminar el atributo UNUSED(). – ideasman42