【发布时间】:2012-06-30 07:22:03
【问题描述】:
使用printf(),我可以使用%hhu 代表unsigned char,%hi 代表short int,%zu 代表size_t,%tx 代表ptrdiff_t,等等
我对@987654330@ 使用什么转换格式说明符?标准中是否存在一个?
或者我必须像这样投射它:
_Bool foo = 1;
printf("foo: %i\n", (int)foo);
【问题讨论】:
-
我认为你不需要在
foo前面进行转换:默认情况下,_Bool将转换为int。 -
@RichardHansen 如果我没记错的话,默认提升总是适用于可变参数:浮点数变为双精度数,字符变为整数,等等。这可能在 C99 中有所改变,我不确定。
-
@Jack:我很怀疑——需要引用。 :) C99 6.3.1.1p1 说
_Bool的转换等级低于所有其他标准整数类型的等级,如果它是typedefed(对吗?),这不可能是真的。此外,6.3.1.2 描述了_Bool的特殊转换规则,如果_Bool只是将typedefed 转换为int,则该规则将不起作用。 -
@Jack 不,肯定不是;请不要发布虚假信息。当未声明参数的类型时,将应用默认提升,因此 _Bool 被隐式转换为 int。
-
@Jack:
_Bool绝对不是int的类型定义。_Bool是一个关键字,它是一个独特的类型。