In GNU C, you declare certain things about functions called in your program which help the compiler optimize function calls and check your code more carefully. This keyword is followed by an attribute specification inside double parentheses. Eight attributes, noreturn , const , format , section , constructor , destructor , unused and weak are currently defined for functions. This allows you to use them in header files without being concerned about a possible macro of the same name. GNU CC knows this automatically.
Some programs define their own functions that never return.
You can declare them noreturn to tell the compiler this fact. Print error message. The noreturn keyword tells the compiler to assume that fatal cannot return. It can then optimize without regard to what would happen if fatal ever did return. This makes slightly better code.