有没有一种可移植的方法在没有stdarg.h的情况下在C中实现可变参数?

时间:2014-10-02 21:34:13

标签: c embedded printf variadic-functions

我正在使用C编写的现有代码库,该代码库正在使用GCC编译为arm7tdmi目标。这是嵌入式代码,在目标系统上没有操作系统的情况下运行。

我遇到的问题是代码使用了奇妙的GPL'd embedded printf library, written by Kustaa Nyholm,它使用stdarg.h作为可变长度参数。没有涉及太多细节,这导致了我需要使用的商业预处理工具的错误。

这基本上是tinyprintf标题:

#include <stdarg.h>

void init_printf(void* putp,void (*putf) (void*,char));
void tfp_printf(char *fmt, ...);
void tfp_sprintf(char* s,char *fmt, ...);
void tfp_format(void* putp,void (*putf) (void*,char),char *fmt, va_list va);

当然,sprintf / printf的工作方式需要变量参数。我想知道的是,如果有一种方法可以在不使用stdharg.h和va_list的情况下实现这一点。或者更重要的是,如果有一种方法可以在C中实现可变参数而不需要stdarg.h。

This solution不能为我工作,因为我使用的是ARM目标。在arm7调用约定中,前四个参数在寄存器中传递。另外,我需要我的代码相当便携。

我不知道如何做到这一点,但也许互联网有一个想法。

1 个答案:

答案 0 :(得分:0)

如果删除tfp_format()声明,则可以将<stdarg.h>包含从标题移至源文件。

如果这不是一个选项,我的猜测就是你运气不好......