C99 는 '이후' 또는 '를 통해' 스테드불지하 부울 _Bool ANSI 좁히어 ''. 그런데 이 또한 'a' 의 형식으로 printf 지정자와 부울?
내 말은 이 같은 일이 dtep 코드:
bool x = true;
printf("%B\n", x);
인쇄하십시오 만들 것이다.
true
bool x = true;
printf("%d\n", x); // prints 1
그러나 왜안돼요
printf(x ? "true" : "false");
이상의
printf("%s", x ? "true" : "false");
심지어 더 나은
fputs(x ? "true" : "false", stdout);
대신?
부울 대한 형식 지정자와 없다. 정보기술 (it) 기업이 일부를 사용하여 인쇄를 위해 기존 지정자를 인쇄할 수 있습니다 추상형데이터타입 아니면 좀 더 돌림무늬:
printf("%s", x?"true":"false");
그러나 GNU C 라이브러리 API 를 통해 추가 사용자 정의 지정자를.
예:
#include <stdio.h>
#include <printf.h>
#include <stdbool.h>
static int bool_arginfo(const struct printf_info *info, size_t n,
int *argtypes, int *size)
{
if (n) {
argtypes[0] = PA_INT;
*size = sizeof(bool);
}
return 1;
}
static int bool_printf(FILE *stream, const struct printf_info *info,
const void *const *args)
{
bool b = *(const bool*)(args[0]);
int r = fputs(b ? "true" : "false", stream);
return r == EOF ? -1 : (b ? 4 : 5);
}
static int setup_bool_specifier()
{
int r = register_printf_specifier('B', bool_printf, bool_arginfo);
return r;
}
int main(int argc, char **argv)
{
int r = setup_bool_specifier();
if (r) return 1;
bool b = argc > 1;
r = printf("The result is: %B\n", b);
printf("(written %d characters)\n", r);
return 0;
}
이 때문에 해당 사용자 정의 는 glibc 확장명은 mgcc 대한 경고가 지정자와:
< pre>; $ gcc - o - 벽 - g 맹자크 주 맹자크: 함수 "main": main.c:34:3: 경고: 알 수 없는 변환 유형 문자 "B '형식으로 [- 우포르마 =] r = printf (", 그 결과, %B\n", b). ^ main.c:34:3: 경고: 너무 많은 인수만 형식에 대한 [- 우포르마 추가 args] < /pre>;
출력:
< pre>; $ ./main 그 결과, 거짓값 (기록되었으므로 21 자) /main 1$ 그 결과, 진정한 (기록되었으므로 20 자) < /pre>;
_Bool b = 1;
printf("%d\n", b);
[출처] (https://stackoverflow.com/questions/11250297/printf-conversion-specifier-for-bool)
내가 답을 포지셔닝하십시오 (https://stackoverflow.com/questions/7617479/best-way-to-print-the-result-of-a-bool-as-false-or-true-in-c) 에서 마찬가지로
printf("%s\n", "false\0true"+6*x);