printf的长度修饰符标志有什么意义?

Tim*_*mmm 0 c++ printf

printf你可以通过格式规范传递一系列"长度修饰符"标志,例如%d用于int参数,但是%hhd用于signed char(8位)并且%lldlong long(64位).

我可以看出为什么这对于大于int类型而言是必要的,但无论如何都会隐式地提升int较小类型.

在什么情况下会%hhd给出不同的输出%d,假设你确实通过了signed char

小智 5

促销活动将保留签名.编译器知道变量的类型,但printf事实并非如此.如果您尝试使用无符号会话说明符打印带符号的变量,它将以不同方式处理该变量(即,打印出符号扩展的F).length修饰符hh表示您明确要使用无符号格式打印signed char.实例:

#include <stdio.h>
int main(void) {
  char* s = "\u00d1"; /* Ñ */
  for (char* p = s; *p; ++p) printf("%02X (%02hhX)\n", *p, *p);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

FFFFFFC3 (C3)
FFFFFF91 (91)
Run Code Online (Sandbox Code Playgroud)