@noreturn ?

bearophile bearophileHUGS at lycos.com
Sat Dec 24 12:09:46 PST 2011


C1X (C11), the successor of C99, is now designed, among its changes there is _Noreturn, this is what the latest free draft says about it:

A function declared with a _Noreturn function specifier shall not return to its caller.
The implementation should produce a diagnostic message for a function declared with a _Noreturn function specifier that appears to be capable of returning to its caller.


_Noreturn void f () {
    abort(); // ok
}
_Noreturn void g (int i) { // causes undefined behavior if i<=0
    if (i > 0) abort();
}



#include <setjmp.h>
_Noreturn void longjmp(jmp_buf env, int val);


#include <stdlib.h>
_Noreturn void abort(void);


#include <stdlib.h>
_Noreturn void exit(int status);


#include <stdlib.h>
_Noreturn void _Exit(int status);


#include <stdlib.h>
_Noreturn void quick_exit(int status);

GNU C has a noreturn attribute since a lot of time. I don't fully understand why such attribute is so useful in C programs, but is something like a @noreturn function attribute useful in D too? Maybe to implement a better halt assert(0)?

Bye,
bearophile


More information about the Digitalmars-d mailing list