重新编码printf; .h文件中的错误:编译器无法识别va_list类型

时间:2014-04-03 15:14:18

标签: c printf variadic-functions

我在C中重新编码printf所以我为每种类型的变量调用函数,所以我在.h中对所有这些变量进行原型化。但我得到了这个错误:

main.h:22:13: error: unknown type name ‘va_list’
     int dispdi(va_list ap);

解决方案?

2 个答案:

答案 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, ...);
...