自ANSI C99以来,有_Bool或通过stdbol .h的bool。但是bool是否也有printf格式说明符?

我的意思是在伪代码中

bool x = true;
printf("%B\n", x);

这将打印:

true

当前回答

在itoa()的传统中:

#define btoa(x) ((x)?"true":"false")

bool x = true;
printf("%s\n", btoa(x));

其他回答

bool没有格式说明符。你可以使用一些现有的用于打印整型的说明符来打印它,或者做一些更奇特的事情:

printf("%s", x?"true":"false");

bool类型没有格式说明符。然而,由于任何比int短的整型在传递给printf()的可变参数时会升格为int,你可以使用%d:

bool x = true;
printf("%d\n", x); // prints 1

但为什么不呢:

printf(x ? "true" : "false");

或者,更好:

printf("%s", x ? "true" : "false");

或者更好的说法是:

fputs(x ? "true" : "false", stdout);

而不是?

你不能,但你可以打印0或1

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

在itoa()的传统中:

#define btoa(x) ((x)?"true":"false")

bool x = true;
printf("%s\n", btoa(x));

要根据我刚刚使用的布尔值打印1或0:

printf("%d\n", !!(42));

对Flags特别有用:

#define MY_FLAG (1 << 4)
int flags = MY_FLAG;
printf("%d\n", !!(flags & MY_FLAG));