| noreturn

| Specifying Attributes of Functions | Next

A few standard library functions, such as abort and exit, cannot return. Some programs define their own functions that never return. You can declare them `noreturn` to tell the compiler this fact. For example:

    void fatal () __attribute__ ((noreturn));

    void
    fatal (/* ... */)
    {
      /* ... */ /* Print error message. */ /* ... */
      exit (1);
    }

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. More importantly, it helps avoid spurious warnings of uninitialized variables.
Do not assume that registers saved by the calling function are restored before calling the `noreturn` function.
It does not make sense for a `noreturn` function to have a return type other than `void`.