Follow Techotopia on Twitter

On-line Guides
All Guides
eBook Store
iOS / Android
Linux for Beginners
Office Productivity
Linux Installation
Linux Security
Linux Utilities
Linux Virtualization
Linux Kernel
System/Network Admin
Programming
Scripting Languages
Development Tools
Web Development
GUI Toolkits/Desktop
Databases
Mail Systems
openSolaris
Eclipse Documentation
Techotopia.com
Virtuatopia.com

How To Guides
Virtualization
General System Admin
Linux Security
Linux Filesystems
Web Servers
Graphics & Desktop
PC Hardware
Windows
Problem Solutions
Privacy Policy

  




 

 

Previous: Argument Macros, Up: How Variadic


A.2.3.1 Old-Style Variadic Functions

Before ISO C, programmers used a slightly different facility for writing variadic functions. The GNU C compiler still supports it; currently, it is more portable than the ISO C facility, since support for ISO C is still not universal. The header file which defines the old-fashioned variadic facility is called varargs.h.

Using varargs.h is almost the same as using stdarg.h. There is no difference in how you call a variadic function; see Calling Variadics. The only difference is in how you define them. First of all, you must use old-style non-prototype syntax, like this:

     tree
     build (va_alist)
          va_dcl
     {

Secondly, you must give va_start only one argument, like this:

       va_list p;
       va_start (p);

These are the special macros used for defining old-style variadic functions:

— Macro: va_alist

This macro stands for the argument name list required in a variadic function.

— Macro: va_dcl

This macro declares the implicit argument or arguments for a variadic function.

— Macro: void va_start (va_list ap)

This macro, as defined in varargs.h, initializes the argument pointer variable ap to point to the first argument of the current function.

The other argument macros, va_arg and va_end, are the same in varargs.h as in stdarg.h; see Argument Macros, for details.

It does not work to include both varargs.h and stdarg.h in the same compilation; they define va_start in conflicting ways.


 
 
  Published under the terms of the GNU General Public License Design by Interspire