2

私はあまりcプログラミングをしていませんが、falseが必要なときに行うときは、trueが必要なときに0を入れます。1を入れます(例:while(1))。それ以外の場合は、「while(ptr)」などを使用します。または「if(x)」。

C99ブール値を使用してみる必要がありますが、プログラミングに不慣れな人がcの基本(cs 1 ??の学生のことを考える)を学ぶのを支援している場合は、他の人にそれらを推奨する必要がありますか?

VisualStudioコンパイラがc99boolをサポートしていることは確かですが、多くのプロジェクト(業界のオープンソースおよびcアプリ)はc89用にコンパイルされますか?Cブールを使用しない場合は、少なくとも#define TRUE 1 #define FALSE 0のようなことを行う必要がありますか?

また、c ++ブール値(c ++の場合)はどうですか?

4

5 に答える 5

5

C ++では、それを使用しない理由はありません。Cでは、私intはこのタスクにのみ使用し、そのようなものはありません#define。私の意見では、のような変数名isDefinitionは、何が起こっているのかを示すのに十分明確です。

もちろん、独自のブール値を定義したり、のブール値を使用したりしても問題はありません<stdbool.h>

于 2010-06-09T21:51:41.800 に答える
3

はい、利用可能な場合は言語抽象化を使用する必要があります。古いCコンパイラを使用する場合でも、boolの抽象化を作成します。コードでリテラルを使用することは非常に悪い習慣です。

于 2010-06-09T21:49:40.203 に答える
2

C ++ブール値は言語の一部であり、最近では基本的にすべてのC ++コンパイラでサポートされているため、問題ありません。

C99ブール値は良い考えのように思えますが、今日書いたコードをC89プロジェクトで使用する必要があるかどうかを覚えておいてください...

于 2010-06-09T21:52:55.097 に答える
2

コンパイラーは、変数がブール値であることがわかっている場合、より適切な最適化を行うことができます。また、intを使用する場合、intが誤って1以外の値に設定される可能性があるため、ビット単位のコンテキストで使用するとバグが発生しやすくなります。

于 2010-06-09T21:55:59.897 に答える
1

C++でboolを使用します。それは何年も前から存在しており、すべてのC++コンパイラがそれをサポートしています。コードで他のC99機能が必要な場合はCで使用してください。ゼロ以外の値はtrueとして解釈され、defineを使用すると、追跡が困難なバグが発生する可能性があるため、C99より前のコードでは使用しないでください(一部のCライブラリ関数はゼロ以外のintを返すように文書化されています)価値、そしてたとえそれが次のようなものを書くことは一般的に悪い習慣であるとしても

if (var==TRUE) { ... }

このようなものは壊れるかもしれませんし、異なるコンパイラ/オペレーティングシステムの下で異なった振る舞いをするかもしれません。

于 2010-06-09T22:34:39.700 に答える