c - 重新编码 printf; .h 文件 : compiler doesn't recognise the va_list type 中的错误

标签 c printf variadic-functions

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

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

解决方案?

最佳答案

如果您正在创建所有您自己的定义,包括 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 定义。 al.,然后简单地包含 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及其链接很好地完善了主题。

关于c - 重新编码 printf; .h 文件 : compiler doesn't recognise the va_list type 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22841881/

相关文章:

c - 即使我为指针结构分配内存,我的 strcpy 也无法工作

c - 变量之间的百分比

c - 带有 realloc() 的 printf() 会使程序崩溃

java - Java 或 Apache Commons 中是否有可变参数空值检查功能?

Haskell FFI 对具有可变参数的函数的支持

c - ASturct arr[] 和 ASturct * arr[] 之间的区别

c - 如何让我的时钟应用程序运行

c - 打印字符串数组的部分内容

c - 使用 printf 打印字符数组

scala - 将单个参数和 Seq 传递给 var-arg 函数