我正在使用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调用约定中,前四个参数在寄存器中传递。另外,我需要我的代码相当便携。
我不知道如何做到这一点,但也许互联网有一个想法。
答案 0 :(得分:0)
如果删除tfp_format()
声明,则可以将<stdarg.h>
包含从标题移至源文件。
如果这不是一个选项,我的猜测就是你运气不好......