c gcc compiler-errors warnings compiler-warnings

la función ''noreturn'' vuelve



gcc compiler-errors (2)

Es posible decirle a gcc que una función en particular nunca regresa. Esto permite ciertas optimizaciones y ayuda a evitar advertencias espurias de variables no inicializadas.

Esto se hace usando el atributo noreturn :

void func() __attribute__ ((noreturn));

Si la función regresa a pesar del atributo noreturn , el compilador emite la advertencia que está viendo (que en su caso se convierte en un error).

Dado que es poco probable que esté utilizando noreturn en su código, la explicación probable es que tiene una función cuyo nombre noreturn conflicto con una función noreturn estándar, como en el siguiente ejemplo:

#include <stdlib.h> void exit(int) { } // warning: ''noreturn'' function does return [enabled by default]

Aquí, mi exit choca con la exit(3) .

Otro candidato obvio para tal enfrentamiento es abort(3) .

Por supuesto, si su función se llama realmente hello() , el culpable es casi seguro que está en algún lugar dentro de su código base.

Cuando compilo el programa C a continuación, recibo esta advertencia: ''noreturn'' function does return . Esta es la función:

void hello(void){ int i; i=1; }

¿Por qué podría estar pasando? Toda la llamada a esta función es hello();

EDITAR: El resultado de error completo:

home.c: In function ‘hello’: hhme.c:838:7: error: variable ‘i’ set but not used [-Werror=unused-but-set-variable] home.c:840:1: error: ‘noreturn’ function does return [-Werror] cc1: all warnings being treated as errors make: *** [home.o] Error 1


Lo más probable es que la función esté marcada con __attribute__((noreturn)) . Sin embargo, de hecho regresa (cuando el control llega al final del cuerpo irs, dado que no ingresa en un bucle infinito, no llama a otras funciones "noreturn", etc.)

No veo cuál es tu punto en 1. marcar la función como no regresiva, 2. escribir una función que no hace nada, ¿probablemente podrías eliminar ambas?