こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

boolean型の戻り値は可能か

 今日は、Cの初心者です。

 比較した値をboolean型でとりたいのですが、色々と調べたのですが、Cではboolean型は定義されてないのでしょうか。

 if(a>b); printf("true\n");というような書き方しか出来ないのでしょうか。
 例えば
  if(a>b);
  printf("%●\n"、(a>b));  という書き方で直接"true"とか"false"を取らすとか、

 "0"、"1"、"-1"の戻り値をとらせることは出来ないのでしょうか。

投稿日時 - 2009-10-09 12:52:25

QNo.5353824

すぐに回答ほしいです

質問者が選んだベストアンサー

> Cではboolean型は定義されてないのでしょうか。

少なくとも標準規格では定義されていません。
すでに回答がでているように、C99であれば_Bool型がありますし、(Cとは書かれていますが)実はC++のつもりであればbool型があります。

> if(a>b); printf("true\n");というような書き方しか出来ないのでしょうか。

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

のようなマクロか関数を定義しておけば、

printf("%s\n", bootoa(a > b));

のようにすることならできます。
あるいは、実はC++のつもりであれば、

std::cout << std::boolalpha << (a > b) << std::endl;

とするのもありでしょう。

> "0"、"1"、"-1"の戻り値をとらせることは出来ないのでしょうか。

int型にすべきですが、0, 1, -1以外の値を取れないようにすることは不可能です。
これまたC++であれば、適切なクラスを定義すれば何とかなります。

投稿日時 - 2009-10-09 19:28:38

お礼

皆さん、有り難う御座いました。
もっと勉強します。

投稿日時 - 2009-10-10 17:08:16

ANo.4

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

変態的だけど C99 なら
printf("%s\n", ((const char *[]){"false", "true"})[a>b]);
とも書ける.

投稿日時 - 2009-10-09 15:43:22

ANo.2

>Cではboolean型は定義されてないのでしょうか。
開発環境によって「BOOL型(0/1)」はあったりなかったりする。

>if(a>b); printf("true\n");というような書き方しか出来ないのでしょうか。
「文字列」として表示するならそう。
実用性はほとんどないけど
printf( "%s\n", (a>b) ? "true" : "false" );
と書けば同じようなことはできる。

>"0"、"1"、"-1"の戻り値をとらせることは出来ないのでしょうか。
符号ありの変数(int等)で十分では?
とNo.1と同じ意見。

どうしてもBOOLが必要なら、typedefでcharやintを使用すればいいのでは?

投稿日時 - 2009-10-09 13:37:10

ANo.1

なんか文章がごちゃごちゃして意味が取れないんだけど....
まず「boolean型」はないけど「_Bool型」はある. stdbool.h を #include すれば bool でも OK.
よって「_Bool型の返り値」は当然可能.
あと, やればわかるけど
printf("%d\n", (a > b));
なんかはできる.
最後の「 "0"、"1"、"-1"の戻り値をとらせることは出来ないのでしょうか。」の意味は分からんのでパス.
まあ, 「int でいいじゃん」といえばその通り.

投稿日時 - 2009-10-09 13:05:13