When I compile the C program below, I get this warning:
‘noreturn’ function does return
. This is the function:
void hello(void){
int i;
i=1;
}
Why could it be happening?
All the call to this function is hello();
EDIT: The full error output:
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
It is possible to tell gcc
that a particular function never returns. This permits certain optimizations and helps avoid spurious warnings of uninitialized variables.
This is done using the noreturn
attribute:
void func() __attribute__ ((noreturn));
If the function does return despite the noreturn
attribute, the compiler emits the warning you're seeing (which in your case gets converted into an error).
Since you're unlikely to be using noreturn
in your code, the likely explanation is that you have a function whose name clashes with a standard noreturn
function, as in the below example:
#include <stdlib.h>
void exit(int) {
} // warning: 'noreturn' function does return [enabled by default]
Here, my exit
clashes with exit(3)
.
Another obvious candidate for such a clash is abort(3)
.
Of course, if your function is actually called hello()
, the culprit is almost certainly somewhere within your code base.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With