On Mar 24, 8:24*pm, James Egan <jegan...@comcast.net> wrote:
> I'm porting a legacy application from HP-UX to Linux. *The va_start macro
> takes one argument under HP-UX, but takes two under Linux:
>
> va_start under HP-UX takes only one var:
>
> hp:/home/fred> grep va_start
> /ndata1/scratch/gcc-3.2/binutils/include/mpw/>
> #define va_start(list) list = (char *) &va_alist
>
> va_start under linux takes two:
>
> linux:/home/fred> grep -i va_start
> /usr/lib/gcc/i386-redhat-linux/4.1.1/include/stdarg.h
> #define va_start(v,l) * __builtin_va_start(v,l)
>
> The errors I'm seeing are listed below. *What would be the best way to
> handle the discrepancy in va_start between the two systems?
>
> >make
>
> lprintf.c: In function 'lprintf':
> lprintf.c:73: error: expected declaration specifiers before 'va_dcl'
> lprintf.c:89:13: error: macro "va_start" requires 2 arguments, but only
> 1 given
> lprintf.c:145: error: expected '=', ',', ';', 'asm' or '__attribute__'
> before 'va_dcl'
> lprintf.c:161:13: error: macro "va_start" requires 2 arguments, but only
> 1 given
> lprintf.c:218: error: expected '=', ',', ';', 'asm' or '__attribute__'
> before 'va_dcl'
> lprintf.c:234:13: error: macro "va_start" requires 2 arguments, but only
> 1 given
> lprintf.c:284: error: expected '{' at end of input
> make[1]: *** [lprintf.o] Error 1
> make: *** [upper] Error 2
To see an example of how to portably write a varadic function (for
instance to print stuff to a log file) see the C-FAQ starting at
section 15.4 and running over the next few items.
|