The C standard explicitly leaves the behavior of the const
and
volatile
type qualifiers applied to functions undefined; these
constructs can only arise through the use of typedef
. As an extension,
GCC defines this use of the const
qualifier to have the same meaning
as the GCC const
function attribute, and the volatile
qualifier
to be equivalent to the noreturn
attribute.
See Common Function Attributes, for more information.
As examples of this usage,
/* Equivalent to: void fatal () __attribute__ ((noreturn)); */ typedef void voidfn (); volatile voidfn fatal; /* Equivalent to: extern int square (int) __attribute__ ((const)); */ typedef int intfn (int); extern const intfn square;
In general, using function attributes instead is preferred, since the
attributes make both the intent of the code and its reliance on a GNU
extension explicit. Additionally, using const
and
volatile
in this way is specific to GNU C and does not work in
GNU C++.