我正在为一个目标平台编写代码,该平台
最多只能依赖于我提供的
我查看了
没有C运行时环境
,没有stdlib
,没有stdio
。我需要一个字符串格式化函数,类似于snprintf
,但应该能够在没有任何依赖项的情况下运行
,甚至不需要C库。最多只能依赖于我提供的
内存分配函数
。我查看了
Trio
,但它需要stdio.h头文件
。我不能使用这个。
编辑
目标平台:PowerPC64自制操作系统
(不是由我制作)。但是库不应依赖于特定于操作系统的内容。
编辑2
我尝试过一些第三方开源库,比如Trio(http://daniel.haxx.se/projects/trio/),snprintf和miniformat(https://bitbucket.org/jj1/miniformat/src),但它们都依赖于像string.h、stdio.h或(更糟糕的是)stdlib.h这样的头文件。如果已经存在一个实现,我不想编写自己的实现,因为那会浪费时间并容易出错。
<stdarg.h>
,那就会有很大的问题(或者您需要模拟它,这通常并不容易)。您的代码需要多具备可移植性?内存分配函数的名称和接口是什么?等等。 - Jonathan Leffler<stdarg.h>
,至于其余部分,你可以修改任何一个自由的snprintf
实现。你只需要将库调用映射到你自己的平台相关函数即可。 - jebsnprintf()
的可移植实现实际上很简单:int snprintf(char *buffer, size_t buflen, char const *fmt, ...) { va_list args; va_start(args, fmt); int rv = vsnprintf(buffer, buflen, fmt, args); va_end(args); return rv; }
但这只是将痛苦推迟到编写vsnprintf()
上(这就是为什么这是一条注释而不是答案)。然而,这是一个很好的建议;用接受va_list
的函数(如vsnprintf()
)来编写可变参数函数(如snprintf()
)。同时公开两个接口。 - Jonathan Leffler