有了printf()
,我可以使用%hhu
表示unsigned char,
%hi
表示
>,
size_t,
%txptrdiff_t,等等。
_Tool
使用哪种转换格式说明符?标准中有吗?
还是我必须这样投射它:
_Bool foo = 1;
printf("foo: %i\n", (int)foo);
正如你在对@Jack的评论中所说,“6.3.1.1p1说< code>_Bool的转换秩小于所有其他标准整数类型的秩”。
在调用printf
时,char
或shortint
>(或unsigned int
)在堆栈上传递,因此我认为使用%dint
,因为这将自动发生。
<罢工> 唯一可能的问题是编译器如何表示 < code>_Bool,它可能是实现定义的,并且可能因编译器而异。我看到了两种可能的实现——0和1或者0和-1。
要获得最佳的可移植性,请遵循@user325181的答案,并使用三元值在两个选项之间进行选择。整数(编译器可能会对其进行优化)或字符串。
编辑:如其他答案所述,_Tool
定义为可以存储0或1的无符号整数类型。因此,它将被提升为<罢工>无符号
当传递给printf()
时,我会说<罢工>%u
%d
是最合适的说明符。
在C99之前,bool不是标准C的一部分,因此不作为printf修饰符存在。C99定义了_Tool(您正在使用的)为整数,因此您应该将其精确转换为要显示的整数(至少从机器的角度来看)。或者,您可以这样做:
printf("%d",foo?1:0);
匿名用户
< code>_Bool类型没有特定的转换长度修饰符。
_Bool
是一个无符号整数类型,大到足以存储值0
和1
。您可以这样打印_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配置