• ベストアンサー

boolean型の戻り値は可能か

 今日は、Cの初心者です。  比較した値をboolean型でとりたいのですが、色々と調べたのですが、Cではboolean型は定義されてないのでしょうか。  if(a>b); printf("true\n");というような書き方しか出来ないのでしょうか。  例えば   if(a>b);   printf("%●\n"、(a>b));  という書き方で直接"true"とか"false"を取らすとか、  "0"、"1"、"-1"の戻り値をとらせることは出来ないのでしょうか。

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

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.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++であれば、適切なクラスを定義すれば何とかなります。

htgotk_001
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

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

すると、全ての回答が全文表示されます。
回答No.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を使用すればいいのでは?

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

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

すると、全ての回答が全文表示されます。

関連するQ&A