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?