c言語のbool型についての質問です。
printf関数でbool型変数の値を表示したい場合は、int型のときと同様に%dでいいのでしょうか?
それとも、bool変数用の指定子が新たに用意されているのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答5件
0
ベストアンサー
printf関数でbool型変数の値を表示したい場合は、int型のときと同様に%dでいいのでしょうか?
真値で1
/偽値で0
を表示するならば、int型と同じく%d
指定子でOKです。
"true"/"false"のような表記が欲しければ、%s
指定子と(b ? "true" : "false")
を組み合わせればよいでしょう。
それとも、bool変数用の指定子が新たに用意されているのでしょうか?
bool型専用の指定子は提供されません。というのも「仮に専用の指定子があっても役に立たないから」という理由があります。
C言語の言語仕様では、printf
のような可変長引数をとる関数の実引数において、bool型の値は常にint型に自動変換されてしまうためです。つまり、bool型専用の指定子があったとしても、その値をbool型のまま渡すことができないのです。
(もし興味があれば;厳密には汎整数拡張(integral promotion)という変換が行われます。)
投稿2015/06/08 14:53
総合スコア6191
0
- 変換指定子と変数の型の対応表 http://webkaru.net/clang/printf-format-specifiers/
この表をみると bool はありません。
では 世の中ではどう対処しているのでしょう?
"c printf bool" で google 検索すると こんなページをみつけました。
- What is the printf format specifier for bool? http://stackoverflow.com/questions/17307275/
...
bool x = true;
printf("%d\n", x); // prints 1But why not
printf(x ? "true" : "false");
or better
printf("%s", x ? "true" : "false");
...
%d で良いようです。
でも、これでは 1 とか 0 と表示されます。
"true", "false" と表示させる方法が提示されてますね。
投稿2015/06/07 10:22
編集2017/05/20 16:07総合スコア22328
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
int型のときと同様に%dでよいです。
真 = 1
偽 = 0 です。
投稿2015/06/07 15:02
総合スコア1021
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
もともとC言語には論理型はなく、intなど整数型で代用していました。その名残でprintfには論理型の表示指定がないのだと思います。
C言語自身の仕様もバージョンアップが行われていて、通称「C99」と呼ばれているものから、bool型が使えるようです。これはC言語から派生したC++言語のbool型を"逆輸入"したようです。
bool型をそれらしく"true"/"false"と表示したいのなら、以下などどうでしょう。
lang
1 printf("boolean value = %s", ((boolvalue == FALSE)? "false": "true"));
投稿2015/06/07 14:34
編集2015/06/07 14:38総合スコア106
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
C言語のboolはc99以降でしか使えない&実装依存だったともいます。・・・たいていはintですが。
なので、stdbool.hがあれば定義を確認したほうがいいと思います。
私の環境では以下のようになっています。
lang
1/usr/include cat stdbool.h 2/* 3 * Copyright (c) 2000 Jeroen Ruigrok van der Werven <asmodai@FreeBSD.org> 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 * 27 * $FreeBSD: releng/10.1/include/stdbool.h 228878 2011-12-25 20:15:41Z ed $ 28 */ 29 30#ifndef __bool_true_false_are_defined 31#define __bool_true_false_are_defined 1 32 33#ifndef __cplusplus 34 35#define false 0 36#define true 1 37 38#define bool _Bool 39#if __STDC_VERSION__ < 199901L && __GNUC__ < 3 && !defined(__INTEL_COMPILER) 40typedef int _Bool; 41#endif 42 43#endif /* !__cplusplus */ 44#endif /* __bool_true_false_are_defined */ 45/usr/include
投稿2015/06/07 10:35
総合スコア6851
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/06/08 19:49