diff options
Diffstat (limited to 'gnulib/doc/posix-functions/va_arg.texi')
m--------- | gnulib | 0 | ||||
-rw-r--r-- | gnulib/doc/posix-functions/va_arg.texi | 39 |
2 files changed, 39 insertions, 0 deletions
diff --git a/gnulib b/gnulib deleted file mode 160000 -Subproject 443bc5ffcf7429e557f4a371b0661abe98ddbc1 diff --git a/gnulib/doc/posix-functions/va_arg.texi b/gnulib/doc/posix-functions/va_arg.texi new file mode 100644 index 0000000..67c19aa --- /dev/null +++ b/gnulib/doc/posix-functions/va_arg.texi @@ -0,0 +1,39 @@ +@node va_arg +@section @code{va_arg} +@findex va_arg + +POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/va_arg.html} + +Gnulib module: --- + +Portability problems fixed by Gnulib: +@itemize +@end itemize + +Portability problems not fixed by Gnulib: +@itemize +@item +The second argument of @code{va_arg} must be a type that is invariant under +the ``default argument promotions'' (ISO C 99 6.5.2.2 paragraph 6). This +means that the following are not valid here: +@table @asis +@item @samp{float} +Use @samp{double} instead. +@item @samp{bool} +Use @samp{int} instead. +@item Integer types smaller than @samp{int}. +Use @samp{int} or @samp{unsigned int} instead. +@end table + +This is a portability problem because you don't know the width of some +abstract types like @code{uid_t}, @code{gid_t}, @code{mode_t}. So, instead of +@smallexample +mode = va_arg (ap, mode_t); +@end smallexample +you have to write +@smallexample +mode = (sizeof (mode_t) < sizeof (int) + ? va_arg (ap, int) + : va_arg (ap, mode_t)); +@end smallexample +@end itemize |