- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
除了 %hn
和 %hhn
(其中 h
或 hh
指定 < em>指向对象),printf
格式说明符的h
和hh
修饰符有什么意义?
由于标准要求默认提升应用于可变参数函数,因此不可能传递类型为 char
或 short
(或任何有符号/其未签名的变体)到 printf
。
根据 7.19.6.1(7),h
修饰符:
Specifies that a following d, i, o, u, x, or X conversion specifier applies to a short int or unsigned short int argument (the argument will have been promoted according to the integer promotions, but its value shall be converted to short int or unsigned short int before printing); or that a following n conversion specifier applies to a pointer to a short int argument.
如果参数实际上是 short
或 unsigned short
类型,则提升为 int
,然后转换回 short
或 unsigned short
将产生与提升为 int
相同的值,而无需任何返回转换。因此,对于 short
或 unsigned short
类型的参数,%d
、%u
等应该给出相同的结果为 %hd
、%hu
等(同样适用于 char
类型和 hh
)。
据我所知,h
或 hh
修饰符可能有用的唯一情况是参数将其传递给 int
超出 short
或 unsigned short
的范围,例如
printf("%hu", 0x10000);
但我的理解是,像这样传递错误的类型无论如何都会导致未定义的行为,因此您不能期望它打印 0。
我见过的一个真实案例是这样的代码:
char c = 0xf0;
printf("%hhx", c);
作者希望它打印 f0
,尽管实现有一个带符号的普通 char
类型(在这种情况下,printf("%x", c)
将打印 fffffff0
或类似内容)。但这种期望是否合理?
(注意:原来的类型是 char
,它被提升为 int
并转换回 unsigned char
char
,从而改变打印的值。但是标准是否指定了这种行为,或者它是损坏的软件可能依赖的实现细节?)
最佳答案
一个可能的原因:为了在格式化输入函数中使用那些修饰符的对称性?我知道这不是绝对必要的,但也许可以看到它的值(value)?
虽然他们没有在 the C99 Rationale document 中提及对称性对于修饰符“h”和“hh”的重要性,委员会确实提到它作为为什么 fscanf()
支持“%p”转换说明符的考虑因素(尽管这对于 C99 来说不是新的 - C90 中支持“%p” ):
Input pointer conversion with %p was added to C89, although it is obviously risky, for symmetry with fprintf.
在关于 fprintf()
的部分中,C99 基本原理文档确实讨论了添加了“hh”,但只是让读者引用 fscanf()
部分:
The %hh and %ll length modifiers were added in C99 (see §7.19.6.2).
我知道这是一个脆弱的线索,但我还是在猜测,所以我想我会给出可能存在的任何论据。
此外,为了完整起见,“h”修饰符出现在原始的 C89 标准中 - 即使由于广泛使用而并非绝对必要,即使可能没有技术要求,它也会存在使用修饰符。
关于c - printf 的 h 和 hh 修饰符的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41521817/
XML可以应用于 WEB 开发的许多方面,常用于简化数据的存储和共享 XML 把数据从 HTML 分离 现在的HTML 文档一般都是显示动态数据,每当数据改变时将花费大量的时间来编辑 HTML
在类(class)(方案)中,我们最近学习了允许函数接受任意数量参数的语法,例如; (define len (lambda args (length args))) >(len 1 2 3
在 redis-cli 中执行 info 命令时,会列出与该服务器相关的所有信息。 “evicted_keys”的目的是什么? 最佳答案 Redis 可以配置为根据需要自动清除键。如果这样配置,red
golang 空结构体 struct{} 可以用来节省内存 ? 1
有人可以解释一下资源文件夹中的 Info.plist 是什么吗?我如何在我的应用程序中使用它?提前致谢。 最佳答案 您可以在Info.plist文件中为所有类型的设备指定不同的常规资源和应用程序配置,
我需要减小可执行文件的大小,并且经常在我的可执行文件中将某些“不必要的” uses占用一定的大小。 例如: Unit1连接到Unit2,但是两个单元的导入为“ System.SysUtils”。 然后
我是 OOP 的新手。虽然我了解多态是什么,但我无法真正使用它。我可以有不同名称的函数。为什么我应该尝试在我的应用程序中实现多态性。 最佳答案 在严格类型化的语言中,多态性对于拥有不同类型对象的列表/
Possible Duplicate: What is the difference between a delegate and events? Possible Duplicate: Differ
这个问题在这里已经有了答案: Custom index.html javadoc page? (2 个答案) 关闭 7 年前。 我使用的是eclipse。一般情况下我们可以使用javadoc.exe
你能解释一下吗ValidateAntiForgeryToken目的并向我展示有关 MVC 4 中的 ValidateAntiForgeryToken 的示例? 我找不到任何解释此属性的示例? 最佳答案
我正在学习 RxSwift 并试图了解 Observable 和 PublishSubject aka Sequence 之间的主要区别。 据我了解,Sequences/PublishesSubjec
有时有人说,在使用 Azure 表时,实际上存在第三个关键分区数据 - 表名称本身。 我在执行分段查询时注意到 TableContinuationToken 有一个 NextTableName 属性。
在Apple提供的aurioTouch项目中,听说在performRender()函数下的AudioController文件中的AudioBufferList ioData携带了mic到音频播放器的音
MSDN 文档没有详细解释它的用途。 由于它是可选的,我几乎假设它类似于某种元数据。 我现在如何看待它,我想用它来为特定用户指定缓存,例如: new CacheItem(key: "keyName",
我正在学习 browserify,我正在尝试用它做两件基本的事情: 转换(通过 shim)非 CommonJS 模块以实现易用性和依赖跟踪 捆绑项目特定的库 我找到了一个工作流程,说明如何使用 Gul
我通过按 CTRL + C 访问 eix 1.8.2 的 Break 菜单。它看起来像这样: BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
在 codeLabs 教程(Android - Kotlin - Room with a View)中,他们使用“viewModelScope.launch(Dispatchers.IO)”来调用插入
我通过按 CTRL + C 访问 eix 1.8.2 的 Break 菜单。它看起来像这样: BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
请耐心等待,因为我没有太多地使用压缩算法,所以这对你们中的一些人来说可能是显而易见的。当某些流媒体视频开始滞后时,我总是注意到这一点。当我看到这个问题时我才意识到我很好奇: Twitter image
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 3 年前。 Improv
我是一名优秀的程序员,十分优秀!