查看“Formatted Printing”的源代码
←
Formatted Printing
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
本文将介绍格式化打印的概念(即 ''printf()'')。 ==''printf()''是如何工作的?== 你迈向获得可靠的 ''printf()'' 功能的第一步是对其工作的理解。 你有没有试过模仿“va_list”(参数列表)并且带''void**'',比如说一种特定的语言,(译者注:这里原作者似乎使用特殊排版格式,打乱了原句单词的位置,无法正确翻译)比如... 总原则和目标 - 本地化 - 翻译工具 - 某语言官方手册 - 或者类似技术? 这肯定行不通! 你'''必须'''使用独立版本的''<stdarg.h>''(或等效实现)中提供的''va_list'',以便能够使用可变函数。 假设使用''<stdarg.h>'',这是''printf()''的原型 <source lang="c"> int printf(const char *format, ...); </source> 你见过''printf()''家族的其他成员吗? 他们是 * ''printf()'':将格式化数据写入'''stdout''' * ''fprintf()'': 将格式化数据写入流 * ''sprintf()'':将格式化数据写入缓冲区 * ''snprintf()'':将格式化数据写入缓冲区,限制写入的最大字符数 * ''vprintf()'': 将格式化数据写入 '''stdout''',使用一个 '''va_list''' 而不是 '''...''' * ''vfprintf()'':将格式化数据写入流,使用一个 '''va_list''' 而不是 '''...''' * ''vsprintf()'':将格式化数据写入缓冲区,使用一个 '''va_list''' 而不是 '''...''' * ''vsnprintf()'': 将格式化的数据写入缓冲区,限制写入的最大字符,使用一个 '''va_list''' 而不是 '''...''' 以及抽象层包装... * ''printf()'': Wraps over ''vprintf()'' * ''fprintf()'': Wraps over ''vfprintf()'' * ''sprintf()'': Wraps over ''vsprintf()'' * ''snprintf()'': Wraps over ''vsnprintf()'' * ''vprintf()'': Wraps over ''vfprintf()'' * ''vfprintf()'': Does the work! * ''vsprintf()'': Wraps over ''vsnprintf()'' (with a magical number as limit). * ''vsnprintf()'': Wraps over ''vfprintf()'' with ''fmemopen()'' 但是,嘿! 这是一个用户空间C库示例! 是的,是这样的。 你很可能只提供一个 “printf()”,它可以完成 “vfprintf()” 的意图,但可以一次完成。 基本上,worker函数将在它必须打印的地方打印,直到找到一个“%”字符。 如果后跟另一个'''%''',则会打印并处理后续内容。 如果后面跟着一个有效的说明符字符,则开始解析。 否则,字符将被打印出来并继续处理。 我们稍后将详细解释每一项的实现。(译者注:然而并没有……) == 常量定义 == 让我们定义一些常量,稍后我们将大量使用这些常量 <source lang="c"> #define FLAG_LEFT 0x01 // The '-' flag #define FLAG_SIGN 0x02 // The '+' flag #define FLAG_SPACE 0x04 // The ' ' flag #define FLAG_TYPE 0x08 // The '#' flag #define FLAG_ZERO 0x10 // The '0' flag </source> ==通用占位符(General Recolection)== 一旦你在一个 '''%''' 之后找到了一些东西,你应该开始声明三个有符号变量: ==示例实现== [[User:A22347/Printf]] {{In Progress}}
本页使用的模板:
模板:In Progress
(
查看源代码
)
返回至“
Formatted Printing
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
变体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息