7

我正在为目标平台编写代码NO C-runtimeNo stdlib, no stdio. 我需要一个字符串格式化函数,snprintf但应该是able to run without any dependencies,甚至 C 库都不需要。

最多只能靠memory alloc functions我提供。

我检查了,Trio但它需要stdio.h header。我不能用这个。

编辑

目标平台:(PowerPC64 home made OS不是我)。然而,图书馆不应该依赖于操作系统特定的东西。

编辑2

我已经尝试了一些 3rd-party 开源库,例如 Trio( http://daniel.haxx.se/projects/trio/ )、snprintf 和 miniformat( https://bitbucket.org/jj1/miniformat/src )但它们都依赖于诸如 string.h、stdio.h 或(甚至更糟)stdlib.h 之类的头文件。如果已经存在,我不想编写自己的实现,因为那会浪费时间并且容易出错。

4

3 回答 3

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

于 2013-10-17T07:14:17.737 回答
2

stdarg.h为了能够处理可变参数,您可能至少需要特定编译器/体系结构调用约定或低级别的知识。

我一直在使用基于Kustaa Nyholm 实现的代码, 它提供printf()(使用用户提供的字符输出存根)和sprintf(),但添加snprintf()会很简单。我添加了vprintf()andvsprintf()例如在我的实现中。

不需要动态内存应用程序,但它确实依赖于 stdarg.h,但正如我所说,如果没有任何可变参数函数,你不可能逃脱 - 尽管你可能会实现自己的。

于 2013-10-17T08:49:26.573 回答
0

我猜你正处于一个规范环境中,你需要明确记录和验证 COTS 代码。

但是,我认为在 stdarg.h 的情况下这是值得的。您可以为此提取源代码并将其视为手写代码(审查、lint、单元测试等)。任何自己编写的替换都需要大量工作,可能不太稳定,而且绝对不可移植。

也就是说,实际的 snprintf 实现应该不会太难,您可能自己也可以这样做。特别是如果您可以剥离一些功能。

请记住,可变参数代码没有类型检查并且容易出错。对于库 snprintf,您可能会发现 gcc 的警告很有帮助。

于 2013-10-17T09:04:57.447 回答