Function decay converts an expression naming a function into a pointer to that function. A function name without a following opening parenthesis decays to a pointer, enabling function-pointer interfaces. section 11.4
Equivalent calls
For double f(double), f(3), (&f)(3), (*f)(3), (*&f)(3), and (&*f)(3) all call f. The expressions differ only in the sequence of decay, address-of, and dereference operations. section 11.4
Function decay supports several callback patterns:
- Pass functions to atexit and at_quick_exit. section 11.4
- Supply comparison functions to bsearch and qsort, allowing generic searching and sorting across element types. section 11.4
- Store selectable logging functions in function-pointer variables and arrays. section 11.4
typedef void atexit_function(void);
// Two equivalent definitions of the same type, which hides a pointer
typedef atexit_function* atexit_function_pointer;
typedef void (*atexit_function_pointer)(void);
// Five equivalent declarations for the same function
void atexit(void f(void));
void atexit(void (*f)(void));
void atexit(atexit_function f);
void atexit(atexit_function* f);
void atexit(atexit_function_pointer f);
!@%STYLE%@!
{"css":"{\"css\": \"font-weight: bold;\"}","target":"[[{\"line\":0,\"ch\":0},{\"line\":0,\"ch\":12}],[{\"line\":3,\"ch\":0},{\"line\":3,\"ch\":12}],[{\"line\":0,\"ch\":8},{\"line\":0,\"ch\":12}],[{\"line\":3,\"ch\":8},{\"line\":3,\"ch\":12}],[{\"line\":5,\"ch\":0},{\"line\":5,\"ch\":4}],[{\"line\":6,\"ch\":0},{\"line\":6,\"ch\":4}],[{\"line\":7,\"ch\":0},{\"line\":7,\"ch\":4}],[{\"line\":8,\"ch\":0},{\"line\":8,\"ch\":4}],[{\"line\":9,\"ch\":0},{\"line\":9,\"ch\":4}],[{\"line\":0,\"ch\":0},{\"line\":0,\"ch\":7}],[{\"line\":2,\"ch\":0},{\"line\":2,\"ch\":7}],[{\"line\":3,\"ch\":0},{\"line\":3,\"ch\":7}],[{\"line\":0,\"ch\":0},{\"line\":0,\"ch\":12}],[{\"line\":3,\"ch\":0},{\"line\":3,\"ch\":12}],[{\"line\":0,\"ch\":8},{\"line\":0,\"ch\":12}],[{\"line\":3,\"ch\":8},{\"line\":3,\"ch\":12}],[{\"line\":5,\"ch\":0},{\"line\":5,\"ch\":4}],[{\"line\":6,\"ch\":0},{\"line\":6,\"ch\":4}],[{\"line\":7,\"ch\":0},{\"line\":7,\"ch\":4}],[{\"line\":8,\"ch\":0},{\"line\":8,\"ch\":4}],[{\"line\":9,\"ch\":0},{\"line\":9,\"ch\":4}],[{\"line\":0,\"ch\":8},{\"line\":0,\"ch\":12}],[{\"line\":3,\"ch\":8},{\"line\":3,\"ch\":12}],[{\"line\":5,\"ch\":0},{\"line\":5,\"ch\":4}],[{\"line\":6,\"ch\":0},{\"line\":6,\"ch\":4}],[{\"line\":7,\"ch\":0},{\"line\":7,\"ch\":4}],[{\"line\":8,\"ch\":0},{\"line\":8,\"ch\":4}],[{\"line\":9,\"ch\":0},{\"line\":9,\"ch\":4}],[{\"line\":0,\"ch\":13},{\"line\":0,\"ch\":19}],[{\"line\":2,\"ch\":8},{\"line\":2,\"ch\":14}],[{\"line\":3,\"ch\":15},{\"line\":3,\"ch\":21}],[{\"line\":5,\"ch\":5},{\"line\":5,\"ch\":11}],[{\"line\":6,\"ch\":5},{\"line\":6,\"ch\":11}],[{\"line\":7,\"ch\":5},{\"line\":7,\"ch\":11}],[{\"line\":8,\"ch\":5},{\"line\":8,\"ch\":11}],[{\"line\":9,\"ch\":5},{\"line\":9,\"ch\":11}],[{\"line\":0,\"ch\":8},{\"line\":0,\"ch\":12}],[{\"line\":3,\"ch\":8},{\"line\":3,\"ch\":12}],[{\"line\":5,\"ch\":0},{\"line\":5,\"ch\":4}],[{\"line\":6,\"ch\":0},{\"line\":6,\"ch\":4}],[{\"line\":7,\"ch\":0},{\"line\":7,\"ch\":4}],[{\"line\":8,\"ch\":0},{\"line\":8,\"ch\":4}],[{\"line\":9,\"ch\":0},{\"line\":9,\"ch\":4}],[{\"line\":0,\"ch\":8},{\"line\":0,\"ch\":12}],[{\"line\":3,\"ch\":8},{\"line\":3,\"ch\":12}],[{\"line\":5,\"ch\":0},{\"line\":5,\"ch\":4}],[{\"line\":6,\"ch\":0},{\"line\":6,\"ch\":4}],[{\"line\":7,\"ch\":0},{\"line\":7,\"ch\":4}],[{\"line\":8,\"ch\":0},{\"line\":8,\"ch\":4}],[{\"line\":9,\"ch\":0},{\"line\":9,\"ch\":4}],[{\"line\":0,\"ch\":8},{\"line\":0,\"ch\":12}],[{\"line\":3,\"ch\":8},{\"line\":3,\"ch\":12}],[{\"line\":5,\"ch\":0},{\"line\":5,\"ch\":4}],[{\"line\":6,\"ch\":0},{\"line\":6,\"ch\":4}],[{\"line\":7,\"ch\":0},{\"line\":7,\"ch\":4}],[{\"line\":8,\"ch\":0},{\"line\":8,\"ch\":4}],[{\"line\":9,\"ch\":0},{\"line\":9,\"ch\":4}],[{\"line\":0,\"ch\":13},{\"line\":0,\"ch\":19}],[{\"line\":2,\"ch\":8},{\"line\":2,\"ch\":14}],[{\"line\":3,\"ch\":15},{\"line\":3,\"ch\":21}],[{\"line\":5,\"ch\":5},{\"line\":5,\"ch\":11}],[{\"line\":6,\"ch\":5},{\"line\":6,\"ch\":11}],[{\"line\":7,\"ch\":5},{\"line\":7,\"ch\":11}],[{\"line\":8,\"ch\":5},{\"line\":8,\"ch\":11}],[{\"line\":9,\"ch\":5},{\"line\":9,\"ch\":11}],[{\"line\":0,\"ch\":8},{\"line\":0,\"ch\":12}],[{\"line\":3,\"ch\":8},{\"line\":3,\"ch\":12}],[{\"line\":5,\"ch\":0},{\"line\":5,\"ch\":4}],[{\"line\":6,\"ch\":0},{\"line\":6,\"ch\":4}],[{\"line\":7,\"ch\":0},{\"line\":7,\"ch\":4}],[{\"line\":8,\"ch\":0},{\"line\":8,\"ch\":4}],[{\"line\":9,\"ch\":0},{\"line\":9,\"ch\":4}],[{\"line\":0,\"ch\":8},{\"line\":0,\"ch\":12}],[{\"line\":3,\"ch\":8},{\"line\":3,\"ch\":12}],[{\"line\":5,\"ch\":0},{\"line\":5,\"ch\":4}],[{\"line\":6,\"ch\":0},{\"line\":6,\"ch\":4}],[{\"line\":7,\"ch\":0},{\"line\":7,\"ch\":4}],[{\"line\":8,\"ch\":0},{\"line\":8,\"ch\":4}],[{\"line\":9,\"ch\":0},{\"line\":9,\"ch\":4}],[{\"line\":0,\"ch\":8},{\"line\":0,\"ch\":12}],[{\"line\":3,\"ch\":8},{\"line\":3,\"ch\":12}],[{\"line\":5,\"ch\":0},{\"line\":5,\"ch\":4}],[{\"line\":6,\"ch\":0},{\"line\":6,\"ch\":4}],[{\"line\":7,\"ch\":0},{\"line\":7,\"ch\":4}],[{\"line\":8,\"ch\":0},{\"line\":8,\"ch\":4}],[{\"line\":9,\"ch\":0},{\"line\":9,\"ch\":4}],[{\"line\":0,\"ch\":13},{\"line\":0,\"ch\":19}],[{\"line\":2,\"ch\":8},{\"line\":2,\"ch\":14}],[{\"line\":3,\"ch\":15},{\"line\":3,\"ch\":21}],[{\"line\":5,\"ch\":5},{\"line\":5,\"ch\":11}],[{\"line\":6,\"ch\":5},{\"line\":6,\"ch\":11}],[{\"line\":7,\"ch\":5},{\"line\":7,\"ch\":11}],[{\"line\":8,\"ch\":5},{\"line\":8,\"ch\":11}],[{\"line\":9,\"ch\":5},{\"line\":9,\"ch\":11}],[{\"line\":0,\"ch\":8},{\"line\":0,\"ch\":12}],[{\"line\":3,\"ch\":8},{\"line\":3,\"ch\":12}],[{\"line\":5,\"ch\":0},{\"line\":5,\"ch\":4}],[{\"line\":6,\"ch\":0},{\"line\":6,\"ch\":4}],[{\"line\":7,\"ch\":0},{\"line\":7,\"ch\":4}],[{\"line\":8,\"ch\":0},{\"line\":8,\"ch\":4}],[{\"line\":9,\"ch\":0},{\"line\":9,\"ch\":4}],[{\"line\":0,\"ch\":13},{\"line\":0,\"ch\":19}],[{\"line\":2,\"ch\":8},{\"line\":2,\"ch\":14}],[{\"line\":3,\"ch\":15},{\"line\":3,\"ch\":21}],[{\"line\":5,\"ch\":5},{\"line\":5,\"ch\":11}],[{\"line\":6,\"ch\":5},{\"line\":6,\"ch\":11}],[{\"line\":7,\"ch\":5},{\"line\":7,\"ch\":11}],[{\"line\":8,\"ch\":5},{\"line\":8,\"ch\":11}],[{\"line\":9,\"ch\":5},{\"line\":9,\"ch\":11}],[{\"line\":0,\"ch\":8},{\"line\":0,\"ch\":12}],[{\"line\":3,\"ch\":8},{\"line\":3,\"ch\":12}],[{\"line\":5,\"ch\":0},{\"line\":5,\"ch\":4}],[{\"line\":6,\"ch\":0},{\"line\":6,\"ch\":4}],[{\"line\":7,\"ch\":0},{\"line\":7,\"ch\":4}],[{\"line\":8,\"ch\":0},{\"line\":8,\"ch\":4}],[{\"line\":9,\"ch\":0},{\"line\":9,\"ch\":4}],[{\"line\":0,\"ch\":13},{\"line\":0,\"ch\":19}],[{\"line\":2,\"ch\":8},{\"line\":2,\"ch\":14}],[{\"line\":3,\"ch\":15},{\"line\":3,\"ch\":21}],[{\"line\":5,\"ch\":5},{\"line\":5,\"ch\":11}],[{\"line\":6,\"ch\":5},{\"line\":6,\"ch\":11}],[{\"line\":7,\"ch\":5},{\"line\":7,\"ch\":11}],[{\"line\":8,\"ch\":5},{\"line\":8,\"ch\":11}],[{\"line\":9,\"ch\":5},{\"line\":9,\"ch\":11}]]"}
!@%STYLE%@!
Compare equivalent function declarations, typedefs, and pointer-bearing forms. section 11.4

