#### 12.13.1 Registering New Conversions

The function to register a new output conversion is `register_printf_function`, declared in `printf.h`.

— Function: int register_printf_function (int spec, printf_function handler-function, printf_arginfo_function arginfo-function)

> Preliminary: | MT-Unsafe const:printfext | AS-Unsafe heap lock | AC-Unsafe mem lock | See POSIX Safety Concepts.

> This function defines the conversion specifier character spec. Thus, if spec is `'Y'`, it defines the conversion ‘`%Y`’. You can redefine the built-in conversions like ‘`%s`’, but flag characters like ‘`#`’ and type modifiers like ‘`l`’ can never be used as conversions; calling `register_printf_function` for those characters has no effect. It is advisable not to use lowercase letters, since the ISO C standard warns that additional lowercase letters may be standardized in future editions of the standard.

> The handler-function is the function called by `printf` and friends when this conversion appears in a template string. See Defining the Output Handler, for information about how to define a function to pass as this argument. If you specify a null pointer, any existing handler function for spec is removed.

> The arginfo-function is the function called by `parse_printf_format` when this conversion appears in a template string. See Parsing a Template String, for information about this.

> Attention: In the GNU C Library versions before 2.0 the arginfo-function function did not need to be installed unless the user used the `parse_printf_format` function. This has changed. Now a call to any of the `printf` functions will call this function when this format specifier appears in the format string.

> The return value is `0` on success, and `-1` on failure (which occurs if spec is out of range).

> You can redefine the standard output conversions, but this is probably not a good idea because of the potential for confusion. Library routines written by other people could break if you do this.