求教:可变参数函数中 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 被定义为一个数组的首地址了,要赋值必须使用 { } 括号
这是为什么????