免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4398 | 回复: 14

关于可变参数的错误 [复制链接]

论坛徽章:
0
发表于 2011-01-10 10:35 |显示全部楼层
  1. #ifdef HAVE_STDARG_H
  2. void
  3. GifQprintf(char *Format, ...) {
  4.     char Line[128];
  5.     va_list ArgPtr;

  6.     va_start(ArgPtr, Format);

  7. #else
  8. #  ifdef HAVE_VARARGS_H
  9. void
  10. GifQprintf(va_alist)
  11.            va_dcl
  12. {
  13.     char *Format, Line[128];
  14.     va_list ArgPtr;

  15.     va_start(ArgPtr);
  16.     Format = va_arg(ArgPtr, char *);
  17. #  endif /* HAVE_VARARGS_H */
  18. #endif /* HAVE_STDARG_H */
  19.     if(GifQuietPrint)                  ///// line 57
  20.         return;

  21.     vsprintf(Line, Format, ArgPtr);       //// line 60
  22.     va_end(ArgPtr);

  23.     fputs(Line, stderr);
  24. }
复制代码
我在调用这个函数时提示下面的错误

../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

论坛徽章:
0
发表于 2011-01-10 10:49 |显示全部楼层
貌似是你宏定义的问题

论坛徽章:
0
发表于 2011-01-10 11:02 |显示全部楼层
似乎就是宏的问题

论坛徽章:
0
发表于 2011-01-10 11:06 |显示全部楼层
大侠能不能指点出来问题在哪呢?

论坛徽章:
0
发表于 2011-01-10 11:12 |显示全部楼层
把第21行代码,放到最后,就好了。

论坛徽章:
0
发表于 2011-01-10 11:26 |显示全部楼层
回复 5# omycle


    不对啊!我试过了也不行的

论坛徽章:
0
发表于 2011-01-10 11:39 |显示全部楼层
  1. #ifndef HAVE_CONFIG_H
  2. #include <config.h>
  3. #endif

  4. #include <stdio.h>

  5. #ifndef HAVE_STDARG_H
  6. #include <stdarg.h>
  7. #elif defined (HAVE_VARARGS_H)
  8. #include <varargs.h>
  9. #endif /* HAVE_STDARG_H */

  10. #include "gif_lib.h"

  11. #ifdef __MSDOS__
  12. int GifQuietPrint = FALSE;
  13. #else
  14. int GifQuietPrint = TRUE;
  15. #endif /* __MSDOS__ */

  16. /*****************************************************************************
  17. * Same as fprintf to stderr but with optional print.
  18. *****************************************************************************/
  19. #ifdef HAVE_STDARG_H
  20. void
  21. GifQprintf(char *Format, ...) {
  22.     char Line[128];
  23.     va_list ArgPtr;

  24.     va_start(ArgPtr, Format);
  25. #else
  26. #ifdef HAVE_VARARGS_H
  27. void
  28. GifQprintf(va_alist)
  29.            va_dcl
  30. {
  31.     char *Format, Line[128];
  32.     va_list ArgPtr;

  33.     va_start(ArgPtr);
  34.     Format = va_arg(ArgPtr, char *);
  35. #endif /* HAVE_VARARGS_H */
  36. #endif /* HAVE_STDARG_H */
  37.     if (GifQuietPrint)
  38.         return;

  39.     vsprintf(Line, Format, ArgPtr);
  40.     va_end(ArgPtr);

  41.     fputs(Line, stderr);
  42. }
复制代码
改成这样 还是不行啊

论坛徽章:
0
发表于 2011-01-10 12:59 |显示全部楼层
看看 HAVE_STDARG_H 和 HAVE_VARARGS_H 有没有定义,

如果是gcc,那么加 -save-temps 参数,然后看看 xxx.i 文件分析一下

论坛徽章:
0
发表于 2011-01-10 14:58 |显示全部楼层
回复 8# drangon

提示这样的错误啊
  1. [root@localhost util]# gcc gif2rgb.c ../lib/qprintf.c -o gif2rgb1  -save-temps  
  2. 在包含自 ../lib/qprintf.c:19 的文件中:
  3. /usr/lib/gcc/x86_64-redhat-linux/4.1.2/include/varargs.h:4:2: 错误:#error "GCC no longer implements <varargs.h>."
  4. /usr/lib/gcc/x86_64-redhat-linux/4.1.2/include/varargs.h:5:2: 错误:#error "Revise your code to use <stdarg.h>."
复制代码

论坛徽章:
0
发表于 2011-01-10 15:20 |显示全部楼层
大侠们 怎么办呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP