반응형
bool의 printf 형식 지정자는 무엇입니까?
ANSI C99 이후가 _Bool
또는 bool
를 통해 stdbool.h
. 그러나 printf
bool 의 형식 지정자 도 있습니까?
그 의사 코드와 같은 것을 의미합니다.
bool x = true;
printf("%B\n", x);
다음과 같이 인쇄됩니다.
true
없습니다. 그러나 variadic 인수 로 전달 될 때 int
승격되는 것보다 짧은 정수 유형 이므로 다음을 사용할 수 있습니다 .int
printf()
%d
bool x = true;
printf("%d\n", x); // prints 1
그러나 왜
printf(x ? "true" : "false");
또는 더 나은
printf("%s", x ? "true" : "false");
또는 더 나은
fputs(x ? "true" : "false", stdout);
대신?
bool의 형식 지정자는 없습니다. 정수 유형을 인쇄하기 위해 기존 지정자를 사용하여 인쇄하거나 더 멋진 작업을 수행 할 수 있습니다.
printf("%s", x?"true":"false");
ANSI C99 / C11에는에 대한 추가 printf 변환 지정자가 포함되어 있지 않습니다 bool
.
그러나 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 확장이므로 GCC는 해당 사용자 지정 지정자에 대해 경고합니다.
$ gcc-벽 -g main.c -o main main.c : 기능 'main'에서 : main.c : 34 : 3 : 경고 : [-Wformat =] 형식의 알 수없는 변환 유형 문자 'B' r = printf ( "결과 : % B \ n", b); ^ main.c : 34 : 3 : 경고 : 형식 [-Wformat-extra-args]에 대한 인수가 너무 많습니다
산출:
$ ./ 메인 결과는 다음과 같습니다. false (21 글자) $ ./main 1 결과는 다음과 같습니다. true (20 글자)
전통 itoa()
:
#define btoa(x) ((x)?"true":"false")
bool x = true;
printf("%s\n", btoa(x));
할 수는 없지만 0 또는 1을 인쇄 할 수 있습니다
_Bool b = 1;
printf("%d\n", b);
c에서 bool의 결과를 'false'또는 'true'로 인쇄하는 가장 좋은 방법 의 대답을 선호 합니까? , 처럼
printf("%s\n", "false\0true"+6*x);
- x == 0, "false \ 0true"+ 0 ""false "를 의미합니다.
- x == 1, "false \ 0true"+ 6 ""true "를 의미합니다.
방금 사용한 부울 값을 기준으로 1 또는 0을 인쇄하려면 다음을 수행하십시오.
printf("%d\n", !!(42));
플래그와 함께 특히 유용합니다 :
#define MY_FLAG (1 << 4)
int flags = MY_FLAG;
printf("%d\n", !!(flags & MY_FLAG));
C보다 C ++을 더 좋아한다면 다음을 시도해보십시오.
#include <ios>
#include <iostream>
bool b = IsSomethingTrue();
std::cout << std::boolalpha << b;
참고 URL : https://stackoverflow.com/questions/17307275/what-is-the-printf-format-specifier-for-bool
반응형
'development' 카테고리의 다른 글
SVG 채우기 색상 투명도 / 알파? (0) | 2020.02.22 |
---|---|
PHP의 var_dump ()와 동등한 파이썬은 무엇입니까? (0) | 2020.02.22 |
Git 커밋 훅 건너 뛰기 (0) | 2020.02.22 |
잘못된 병합을 수정하고 올바른 병합을 고정 병합으로 재생하는 방법은 무엇입니까? (0) | 2020.02.22 |
NumPy 다차원 배열의 i 번째 열에 액세스하는 방법은 무엇입니까? (0) | 2020.02.22 |