Use of extensions throughout the X server tree ---------------------------------------------- Optional extensions: The server will still build if your toolchain does not support these extensions, although the results may not be optimal. * _X_SENTINEL(x): member x of the passed structure must be NULL, e.g.: void parseOptions(Option *options _X_SENTINEL(0)); parseOptions("foo", "bar", NULL); /* this is OK */ parseOptions("foo", "bar", "baz"); /* this is not */ This definition comes from Xfuncproto.h in the core protocol headers. * _X_ATTRIBUTE_PRINTF(x, y): This function has printf-like semantics; check the format string when built with -Wformat (gcc) or similar. * _X_EXPORT: this function should appear in symbol tables. * _X_HIDDEN: this function should not appear in the _dynamic_ symbol table. * _X_INTERNAL: like _X_HIDDEN, but attempt to ensure that this function is never called from another module. * _X_INLINE: inline this functon if possible (generally obeyed unless disabling optimisations). * _X_DEPRECATED: warn on use of this function. Mandatory extensions: The server will not build if your toolchain does not support these extensions. * named initialisers: explicitly initialising structure members, e.g.: struct foo bar = { .baz = quux, .brian = "dog" }; * variadic macros: macros with a variable number of arguments, e.g.: #define DebugF(x, ...) /**/