Chinaunix
标题:
关于可变参数的错误
[打印本页]
作者:
sumland
时间:
2011-01-10 10:35
标题:
关于可变参数的错误
#ifdef HAVE_STDARG_H
void
GifQprintf(char *Format, ...) {
char Line[128];
va_list ArgPtr;
va_start(ArgPtr, Format);
#else
# ifdef HAVE_VARARGS_H
void
GifQprintf(va_alist)
va_dcl
{
char *Format, Line[128];
va_list ArgPtr;
va_start(ArgPtr);
Format = va_arg(ArgPtr, char *);
# endif /* HAVE_VARARGS_H */
#endif /* HAVE_STDARG_H */
if(GifQuietPrint) ///// line 57
return;
vsprintf(Line, Format, ArgPtr); //// line 60
va_end(ArgPtr);
fputs(Line, stderr);
}
复制代码
我在调用这个函数时提示下面的错误
../lib/qprintf.c:57: 错误:expected identifier or ‘(’ before ‘if’
../lib/qprintf.c:60: 警告:数据定义时没有类型或存储类
../lib/qprintf.c:60: 警告:函数声明中出现形参名却未指定类型
../lib/qprintf.c:61: 警告:数据定义时没有类型或存储类
../lib/qprintf.c:61: 警告:函数声明中出现形参名却未指定类型
../lib/qprintf.c:63: 警告:数据定义时没有类型或存储类
../lib/qprintf.c:63: 警告:函数声明中出现形参名却未指定类型
../lib/qprintf.c:64: 错误:expected identifier or ‘(’ before ‘}’ token
作者:
erlangs
时间:
2011-01-10 10:49
貌似是你宏定义的问题
作者:
liyandong106
时间:
2011-01-10 11:02
似乎就是宏的问题
作者:
sumland
时间:
2011-01-10 11:06
大侠能不能指点出来问题在哪呢?
作者:
omycle
时间:
2011-01-10 11:12
把第21行代码,放到最后,就好了。
作者:
sumland
时间:
2011-01-10 11:26
回复
5#
omycle
不对啊!我试过了也不行的
作者:
sumland
时间:
2011-01-10 11:39
#ifndef HAVE_CONFIG_H
#include <config.h>
#endif
#include <stdio.h>
#ifndef HAVE_STDARG_H
#include <stdarg.h>
#elif defined (HAVE_VARARGS_H)
#include <varargs.h>
#endif /* HAVE_STDARG_H */
#include "gif_lib.h"
#ifdef __MSDOS__
int GifQuietPrint = FALSE;
#else
int GifQuietPrint = TRUE;
#endif /* __MSDOS__ */
/*****************************************************************************
* Same as fprintf to stderr but with optional print.
*****************************************************************************/
#ifdef HAVE_STDARG_H
void
GifQprintf(char *Format, ...) {
char Line[128];
va_list ArgPtr;
va_start(ArgPtr, Format);
#else
#ifdef HAVE_VARARGS_H
void
GifQprintf(va_alist)
va_dcl
{
char *Format, Line[128];
va_list ArgPtr;
va_start(ArgPtr);
Format = va_arg(ArgPtr, char *);
#endif /* HAVE_VARARGS_H */
#endif /* HAVE_STDARG_H */
if (GifQuietPrint)
return;
vsprintf(Line, Format, ArgPtr);
va_end(ArgPtr);
fputs(Line, stderr);
}
复制代码
改成这样 还是不行啊
作者:
drangon
时间:
2011-01-10 12:59
看看 HAVE_STDARG_H 和 HAVE_VARARGS_H 有没有定义,
如果是gcc,那么加 -save-temps 参数,然后看看 xxx.i 文件分析一下
作者:
sumland
时间:
2011-01-10 14:58
回复
8#
drangon
提示这样的错误啊
[root@localhost util]# gcc gif2rgb.c ../lib/qprintf.c -o gif2rgb1 -save-temps
在包含自 ../lib/qprintf.c:19 的文件中:
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include/varargs.h:4:2: 错误:#error "GCC no longer implements <varargs.h>."
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include/varargs.h:5:2: 错误:#error "Revise your code to use <stdarg.h>."
复制代码
作者:
sumland
时间:
2011-01-10 15:20
大侠们 怎么办呢?
作者:
drangon
时间:
2011-01-10 17:13
本帖最后由 drangon 于 2011-01-10 17:15 编辑
HAVE_STDARG_H 和 HAVE_VARARGS_H 到底是什么回事?
理论上应该是configure脚本检测生成的,一般情况下,应该是定义了 HAVE_STDARG_H 而不能定义 HAVE_VARARGS_H
楼主的编译好像是一开始两个都没定义,后来又定义了 HAVE_VARARGS_H 。。。。或者不知什么原因引用了 varargs.h 头文件,这个头文件已经不支持了,要用 stdarg.h
楼主的情况不了解,无责任乱猜
作者:
omycle
时间:
2011-01-10 20:41
把你预处理后的结果看一下就知道了。看宏定义了没有
作者:
sumland
时间:
2011-01-11 09:11
我也不知道怎么办啊?这两个宏确实没有定义,却又出现预编译里面。
作者:
sumland
时间:
2011-01-11 09:35
求大侠指点一下啊!那个宏是没有定义也没关系吧 我可以固定使用一个头文件啊
作者:
sumland
时间:
2011-01-11 09:35
问题是我固定使用stdarg.h还是有问题啊
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2