電子書籍の厳選無料作品が豊富!

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

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

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

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

A 回答 (4件)

> 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++であれば、適切なクラスを定義すれば何とかなります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/10/10 17:08

変態的だけど C99 なら


printf("%s\n", ((const char *[]){"false", "true"})[a>b]);
とも書ける.
    • good
    • 0

>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を使用すればいいのでは?
    • good
    • 0

なんか文章がごちゃごちゃして意味が取れないんだけど....


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報