Next: Volatiles, Previous: Inline, Up: C Extensions [Contents][Index]

### 6.46 Const and Volatile Functions

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++.