Saltar al contenido

Deshabilitar GCC “puede usarse sin inicializar” en una variable particular

El tutorial o código que hallarás en este artículo es la resolución más fácil y válida que encontramos a tus dudas o problema.

Solución:

Intenta hacer esto:

 #pragma GCC diagnostic ignored "-Wuninitialized"
        foo(b);         /* no diagnostic for this one */

Este pragma viene en tres sabores interesantes y útiles: warning, error, ignored. Ver 6.56.10 Pragmas de Diagnóstico para sus usos. El enlace dice,

GCC permite al usuario habilitar o deshabilitar selectivamente ciertos tipos de diagnósticos y cambiar el tipo de diagnóstico. Por ejemplo, la política de un proyecto puede requerir que todas las fuentes se compilen con -Werror, pero ciertos archivos pueden tener excepciones que permitan tipos específicos de advertencias. O bien, un proyecto puede habilitar diagnósticos de forma selectiva y tratarlos como errores según las macros de preprocesador definidas.

La respuesta aceptada tiene dos grandes problemas que requieren más que un comentario. Primero, desactiva la advertencia para todo el archivo. Si ese pragma reside en un encabezado, probablemente por más. Las advertencias son útiles y si de hecho es un false positivo, uno debe deshabilitar la advertencia para un montón de código lo más pequeño posible.

Luego, la advertencia en el OP es “tal vez no inicializado”, que se desactiva con -Wmaybe-uninitialized, a diferencia de -Wuninitialized.

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
function() or int variable;
#pragma GCC diagnostic pop

@Nawaz ha respondido la pregunta específicamente, pero ¿ha considerado que el hecho de que necesite esto puede indicar que está declarando su struct ¿demasiado temprano/en un ámbito menos anidado que el apropiado? Por lo general, sería mucho mejor si pudiera declarar su struct en un punto donde realmente puede inicializarlo en lugar de declararlo antes y completarlo en varias ubicaciones.

Además, aunque puede verificar que nunca se usa sin inicializar en este momento, ¿qué pasa si alguien más agrega una nueva ruta de código en el futuro y no se inicializa correctamente? Si desactiva la advertencia, se compilará silenciosamente y probablemente se romperá de forma inesperada. A menos que pueda probar que la inicialización está tomando una cantidad medible de la CPU de su programa, probablemente sea mejor hacer la inicialización por adelantado.

Si tienes alguna perplejidad y capacidad de acrecentar nuestro escrito puedes ejecutar una glosa y con placer lo interpretaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *