求教:可变参数函数中 va_list 的定义问题

zhiys 2011-09-05 10:07:24
最近把32位系统下的程序,转到64位系统下重新编译,编译中提示一个奇怪的错误

error: array must be initialized with a brace-enclosed initializer

这个错误是针对我的一个函数中使用的可变参数 va_list pointer的,
我定义了 va_list pointer=NULL ;
这是因为我检查 va_list 的定义 在 /usr 目录下搜索:
./lib64/gcc/x86_64-linux-gnu/4.3/include/stdarg.h:typedef __gnuc_va_list va_list;
./include/err.h:# define __gnuc_va_list __ptr_t
./include/sys/cdefs.h:#define __ptr_t void *
所以 va_list 就是 void * .
所以我定义 pointer 变量时,同时给了 NULL 作为初始值。
而且这么写,在32位 linux 下编译通过了,但在64位时会报上面的错。
只有我修改为 va_list pointer ; 不给 NULL 初始值才正确。
而根据错误的提示,似乎 va_list 被定义为一个数组的首地址了,要赋值必须使用 { } 括号
这是为什么????
...全文
452 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackyjkchen 2011-09-05
  • 打赏
  • 举报
回复
楼主见过给va_list赋初值的么?
taodm 2011-09-05
  • 打赏
  • 举报
回复
使用va_list的时候请遵循惯例,别自作聪明。
不同编译器不同版本不同编译参数下,va_list的实际定义可能不同,不要写任何可能依赖具体实现的代码。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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