我在C中重新编码printf
所以我为每种类型的变量调用函数,所以我在.h中对所有这些变量进行原型化。但我得到了这个错误:
main.h:22:13: error: unknown type name ‘va_list’
int dispdi(va_list ap);
解决方案?
答案 0 :(得分:1)
如果 您正在创建所有自己的定义,包括va_list,那么 我假设您在.h中创建的定义看起来至少类似于:
#ifndef _VA_LIST_DEFINED
#ifdef _M_CEE_PURE
typedef System::ArgIterator va_list;
#else
typedef char * va_list;
#endif
#define _VA_LIST_DEFINED
#endif
只要你使用你的printf版本
就包含这个.h但是,如果 ,您使用的是va_list,va_start,va_arg等标准C定义。等等,然后简单地包括stdarg.h。
在任何一种情况下 ,这里是使用va_宏的简单可变参数函数(不是printf,只是一个简单示例)的示例:
#include <stdarg.h>
void variadic_function(int Param, ...)
{
int dslot;
va_list params;
va_start(params, Param);
dslot = va_arg(params, int);
va_end(args);
}
如需进一步阅读 ,this Wiki article及其链接可以很好地完善主题。
答案 1 :(得分:0)
在使用stdarg.h
和朋友之前,您应该包含va_list
标头文件。
您的头文件可能类似于:
#include <stdarg.h>
...
int my_printf (const char *format, ...);
...