当前位置: 首页 > 知识库问答 >
问题:

_Bool的printf转换说明符?

尉迟冯浩
2023-03-14

有了printf(),我可以使用%hhu表示unsigned char,%hi表示 >, size_t, %txptrdiff_t,等等。

_Tool使用哪种转换格式说明符?标准中有吗?

还是我必须这样投射它:

_Bool foo = 1;
printf("foo: %i\n", (int)foo);

共有3个答案

彭仲卿
2023-03-14

正如你在对@Jack的评论中所说,“6.3.1.1p1说< code>_Bool的转换秩小于所有其他标准整数类型的秩”。

在调用printf时,charshortint>(或unsigned int)在堆栈上传递,因此我认为使用%dint,因为这将自动发生。

<罢工> 唯一可能的问题是编译器如何表示 < code>_Bool,它可能是实现定义的,并且可能因编译器而异。我看到了两种可能的实现——0和1或者0和-1。

要获得最佳的可移植性,请遵循@user325181的答案,并使用三元值在两个选项之间进行选择。整数(编译器可能会对其进行优化)或字符串。

编辑:如其他答案所述,_Tool定义为可以存储0或1的无符号整数类型。因此,它将被提升为<罢工>无符号当传递给printf()时,我会说<罢工>%u%d是最合适的说明符。

申宜
2023-03-14

在C99之前,bool不是标准C的一部分,因此不作为printf修饰符存在。C99定义了_Tool(您正在使用的)为整数,因此您应该将其精确转换为要显示的整数(至少从机器的角度来看)。或者,您可以这样做:

printf("%d",foo?1:0);
巴帅
2023-03-14
匿名用户

< code>_Bool类型没有特定的转换长度修饰符。

_Bool是一个无符号整数类型,大到足以存储值01。您可以这样打印_Bool

_Bool b = 1;
printf("%d\n", b);

由于整数提升规则,_Bool保证提升到int

 类似资料:
  • 有人能解释一下printf中的是如何使用说明符“%g”的吗?下面的输出让我很困惑: 我了解到使用最短的表示形式。 但是下面的输出仍然让我困惑 我的问题是:为什么能给出确切的数字,而不能? 似乎16个有效数字是准确的。有人能告诉我原因吗?

  • 由于ANSI C99,通过有或。但是bool是否也有格式说明符? 它将打印:

  • 在我正在读的一本书里,写着带有单个参数(没有转换说明符)的< code>printf被弃用。它建议替换为 与 或者 有人能告诉我为什么是错的吗?书上写着它包含漏洞,这些漏洞是什么?

  • 在 C (n1570 7.21.6.1/10) 和 C(通过包含 C 标准库)中,向类型与其转换规范不匹配的 printf 提供参数是未定义的行为。一个简单的例子: 格式字符串指定 int,而参数是浮点类型。 这个问题的灵感来自一个用户的问题,他遇到了大量转换不匹配的遗留代码,这显然没有伤害,参见。理论和实践中的未定义行为。 最初,仅仅声明格式不匹配的UB似乎很激烈。很明显,输出可能是错误的,这取

  • 假设我有以下功能: 我希望调用者指定要打印的浮点数,以及小数点后的位数。(由<代码>表示)。%d说明符) 然而,在编译此代码时,我收到两个警告: 和 我的问题是:如何将格式说明符(例如本例中的)注入现有格式说明符?

  • xml配置。log4j2.version=2.10.0,Spring Boot版本为1.5.9 log4j2.xml配置