<!-- ##### SECTION Title ##### -->
Miscellaneous Macros

<!-- ##### SECTION Short_Description ##### -->
specialised macros which are not used often.

<!-- ##### SECTION Long_Description ##### -->
<para>
These macros provide more specialized features which are not needed so often
by application programmers.
</para>

<!-- ##### MACRO G_CAN_INLINE ##### -->
<para>
Defined if the compiler can compile functions inline.
</para>


<!-- ##### MACRO G_INLINE_FUNC ##### -->
<para>
Used to declare inline functions so that they can be compiled even by
compilers which do not support inline.
</para>


<!-- ##### MACRO inline ##### -->
<para>
Used to overcome problems with compilers which do not support the inline
keyword. On those compilers this macro disappears so the compiler doesn't
complain.
</para>


<!-- ##### MACRO G_STMT_END ##### -->
<para>
Used within multi-statement macros so that they can be used in places where
only one statement is expected by the compiler.
</para>


<!-- ##### MACRO G_STMT_START ##### -->
<para>
Used within multi-statement macros so that they can be used in places where
only one statement is expected by the compiler.
</para>


<!-- ##### MACRO G_VA_COPY ##### -->
<para>
Portable way to copy <type>va_list</type> variables.
</para>

@ap1: the <type>va_list</type> variable to place a copy of @ap2 in.
@ap2: a <type>va_list</type>.


<!-- ##### MACRO G_GNUC_CONST ##### -->
<para>
Expands to the GNU C const function attribute if the compiler is GNU C.
This enables optimization of the function.
See the GNU C documentation for details. 
</para>


<!-- ##### MACRO G_GNUC_FORMAT ##### -->
<para>
Expands to the GNU C format_arg function attribute if the compiler is GNU C.
This is used for declaring functions which take a variable number of
parameters, like <function>printf()</function> and
<function>scanf()</function>. See the GNU C documentation for details. 
FIXME: still available in GNU C?
</para>

@arg_idx: the index of the argument.

<!-- ##### MACRO G_GNUC_FUNCTION ##### -->
<para>
Expands to the GNU C __FUNCTION__ variable if the compiler is GNU C,
or "" if it isn't.
The GNU C __FUNCTION__ variable contains the name of the current function.
See the GNU C documentation for details. 
</para>


<!-- ##### MACRO G_GNUC_NORETURN ##### -->
<para>
Expands to the GNU C noreturn function attribute if the compiler is GNU C.
It is used for declaring functions which never return.
It enables optimization of the function, and avoids possible compiler
warnings. See the GNU C documentation for details. 
</para>


<!-- ##### MACRO G_GNUC_PRETTY_FUNCTION ##### -->
<para>
Expands to the GNU C __PRETTY_FUNCTION__ variable if the compiler is GNU C,
or "" if it isn't.
The GNU C __PRETTY_FUNCTION__ variable contains the name of the current
function. For a C program this is the same as the __FUNCTION__ variable
but for C++ it also includes extra information such as the class
and function prototype. See the GNU C documentation for details. 
</para>


<!-- ##### MACRO G_GNUC_PRINTF ##### -->
<para>
Expands to the GNU C format function attribute if the compiler is GNU C.
This is used for declaring functions which take a variable number of
arguments, with the same syntax as <function>printf()</function>.
It allows the compiler to type-check the arguments passed to the function.
See the GNU C documentation for details. 
</para>

@format_idx: the index of the argument corresponding to the format string.
(The arguments are numbered from 1).
@arg_idx: the index of the first of the format arguments.

<!-- ##### MACRO G_GNUC_SCANF ##### -->
<para>
Expands to the GNU C format function attribute if the compiler is GNU C.
This is used for declaring functions which take a variable number of
arguments, with the same syntax as <function>scanf()</function>.
It allows the compiler to type-check the arguments passed to the function.
See the GNU C documentation for details. 
</para>

@format_idx: the index of the argument corresponding to the format string.
(The arguments are numbered from 1).
@arg_idx: the index of the first of the format arguments.

<!-- ##### MACRO G_ENUM ##### -->
<para>
FIXME: abandoned?
</para>

<!-- ##### MACRO G_FLAGS ##### -->
<para>
FIXME: abandoned?
</para>


<!-- ##### MACRO G_NV ##### -->
<para>
FIXME: abandoned?
</para>


<!-- ##### MACRO G_SV ##### -->
<para>
FIXME: abandoned?
</para>

<!-- ##### MACRO g_string ##### -->
<para>
Turns the argument into a string literal by using the '#' stringizing operator.
</para>

@x: text to convert to a string.


