我正在为NO C-runtime
的目标平台编写代码。 No stdlib
,no stdio
。我需要像snprintf
这样的字符串格式化函数,但它应该是able to run without any dependencies
,甚至不是C库。
最多可以取决于我提供的memory alloc functions
。
我签出了Trio
,但需要stdio.h header
。我不能用这个。
修改
目标平台:PowerPC64 home made OS
(不是我)。但是,库不应该依赖于操作系统特定的东西。
EDIT2
我已尝试过一些第三方开源库,例如Trio(http://daniel.haxx.se/projects/trio/),snprintf和miniformat(https://bitbucket.org/jj1/miniformat/src),但它们都依赖于string.h,stdio等标题。 h,或者(甚至更糟)stdlib.h。如果已经存在,我不想编写自己的实现,因为这会耗费时间并且容易出错。
答案 0 :(得分:7)
尝试使用uclibc的snprintf实现。这可能具有最少的依赖性。一些挖掘表明snprintf是用vsnprintf实现的,它是用vfprintf实现的(奇怪的是),它使用假的“流”来写入字符串。
这是代码的指针:http://git.uclibc.org/uClibc/tree/libc/stdio/_vfprintf.c
此外,快速谷歌搜索也出现了这个:
希望一个适合您的目的。这可能不是一个完整的清单。
这里有一个不同的列表: http://trac.eggheads.org/browser/trunk/src/compat/README.snprintf?rev=197
答案 1 :(得分:2)
您可能至少需要stdarg.h
或对特定编译器/体系结构调用约定的低级知识,以便能够处理可变参数。
我一直在使用基于Kustaa Nyholm's implementation的代码。它提供printf()
(使用用户提供的字符输出存根)和sprintf()
,但添加snprintf()
就足够了。我在我的实现中添加了vprintf()
和vsprintf()
。
不需要动态内存应用程序,但它确实依赖于stdarg.h,但正如我所说,如果没有任何可变参数函数,你不可能逃脱 - 尽管你可能会实现自己的。
答案 2 :(得分:0)
我猜你在规范的环境中需要明确记录和验证COTS代码。
但是,我认为在stdarg.h的情况下,这是值得的。您可以直接获取源代码并将其视为手写代码(评论,lint,单元测试等)。任何自编的替代品都会有很多工作,可能不太稳定,绝对不便携。
也就是说,实际的snprintf实现应该不会太难,你可以自己做。特别是如果您可以剥离一些功能。
请记住,vararg代码没有类型检查,并且容易出错。对于库snprintf,您可能会发现gcc的警告很有帮助。