[lug] varargs.h stdarg.h

D. Stimits stimits at comcast.net
Mon Apr 25 17:14:18 MDT 2005


Gary Hodges wrote:
> I'm trying to get some C code to compile and have run into an issue.  It 
> seems varargs.h is no longer supported and a compile error suggested 
> changing to stdarg.h.  I've done that, but it results in a bunch of 
> errors that mostly seem syntax related.  I've tried changing code based 
> on a few searches, but being almost completely C illiterate, I'm not 
> making much progress.  The entire thing is only about 50 lines.  I'm 
> including a short section that is producing some errors and am hoping I 
> can get some guidance (Lines 25-39).  I'm told this compiled fine with 
> RHL 7.0.
> int xprintf( va_alist )
>  va_dcl
> {
>  va_list args;
>  FILE    *fp;
>  int     line;
>  char    *format, *file, out_str[512];
> 
>  va_start(args);
> 
>  /* get file pointer */
>  fp = va_arg(args, FILE *);
>  if(fp == NULL)
>    return(0);
...

Don't know if this will help or not, but take a look at 
/usr/include/ansidecl.h.

It appears that you're using really old code (the declaration style 
itself is something I haven't seen anyone use in years) that is 
"traditional" C but not ANSI C. By default I believe gcc on recent 
distros probably expects ANSI C, since __STDC__ is likely there by 
default. Add this to a simple test program:

#ifdef __STDC__
printf("__STDC__\n");
#else
printf("NOT __STDC__\n");
#endif

Now if you go to before even the include parts and add "#undef __STDC__" 
you'll get a compile error stating it needs an ISO conforming C compiler 
to use glibc headers. Maybe there is a way to get around this but 
probably it isn't worthwhile. Look at "man stdarg" and you will see 
va_dcl isn't even part of variable arguments these days. The sample Lori 
sent works because it is ANSI/ISO. You'll probably have to convert to 
something newer than traditional C.

D. Stimits, stimits AT comcast DOT net



More information about the LUG mailing list