<para>Programmers using the strcat function can easily be recognized as lazy and reckless. from The GNU C Library (glibc) manual (5.5 Concatenating Strings)</para>
<para>Whenever a programmer feels the need to use strcat she or he should think twice and look through the program to see whether the code cannot be rewritten to take advantage of already calculated results. The related functions strlcat, strncat, wcscat and wcsncat are almost always unnecessary, too. Again: it is almost always unnecessary to use functions like strcat. 😄️</para>
<para>Before calling vprintf or the other functions listed in this section, you must call va_start (see Variadic Functions) to initialize a pointer to the variable arguments. Then you can call va_arg to fetch the arguments that you want to handle yourself. This advances the pointer past those arguments.</para>
<para>Once your va_list pointer is pointing at the argument of your choice, you are ready to call vprintf. That argument and all subsequent arguments that were passed to your function are used by vprintf along with the template that you specified separately.</para>
<para>A.2 Variadic Functions ISO C defines a syntax for declaring a function to take a variable number or type of arguments. (Such functions are referred to as varargs functions or variadic functions.) However, the language itself provides no mechanism for such functions to access their non-required arguments; instead, you use the variable arguments macros defined in stdarg.h.</para>
<para>This section describes how to declare variadic functions, how to write them, and how to call them properly. </para>