关于GCC警告的问题

guoshimin57 2010-11-18 01:35:45
[gsm@fedora ~]$ cat -n b.c
1 #include <stdio.h>
2 #include <string.h>
3
4 #define _(str) (str)
5 #define report_error(format, ...) \
6 do\
7 {\
8 fprintf(stderr, _("文件:%s 函數:%s 行號:%d 錯誤:"),\
9 __FILE__, __func__, __LINE__); \
10 fprintf(stderr, format, ##__VA_ARGS__); \
11 fprintf(stderr, "\n");\
12 }while(0)
13
14 int main(void)
15 {
16 report_error("test");
17 return 0;
18 }
[gsm@fedora ~]$ gcc -std=c99 -pedantic-errors -Wall b.c
b.c: In function 「main」:
b.c:16:24: 錯誤:ISO C99 需要使用剩餘的引數

如何修改代码(别告诉我修改编译参数。。。)以消除警告?
...全文
165 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
guoshimin57 2010-11-18
  • 打赏
  • 举报
回复
C99是支持只向可变参数宏传递一个参数和。只不过GCC会发出警告而已。我的问题是如何修改代码以消除警告。当然,前提是用标准C,而不能用GCC扩展。
bourbaki 2010-11-18
  • 打赏
  • 举报
回复
因为是宏定义,函数定义就可以你那样写也能支持1个参数
bourbaki 2010-11-18
  • 打赏
  • 举报
回复
定义成(format,...),意味着至少两个参数,而你只给了1个,所以报错了
brookmill 2010-11-18
  • 打赏
  • 举报
回复
5 #define report_error(...) \
10 fprintf(stderr, ##__VA_ARGS__); \
用楼主的编译命令行,通过。gcc 4.3.2
report_error("test");
report_error("test %d %s", 1, "abc");
都可以输出

23,110

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧