C 標準では、初期化されていない bool がプログラムをクラッシュさせることを許可していますか?
はい、ISO C では許可されています (ただし、許可されていません)この選択を行うには実装が必要です。
ISO C では、 bool には、true または false の 2 つの値のみを指定できます。ただし、これらの値がメモリ内でどのように表現されるかについては指定されていません。これは実装に任されています。
一般的な実装の 1 つは、単一ビットを使用して bool を表し、0 は false を表し、1 は true を表します。この表現は、Clang や GCC を含む多くの C コンパイラで使用されます。
ただし、一部のコンパイラは bool に別の表現を使用することを選択する場合があります。たとえば、Microsoft Visual C コンパイラは 32 ビット整数を使用して bool を表し、0 は false を表し、ゼロ以外の値は true を表します。
コンパイラが bool に非標準の表現を使用する場合、初期化されていない bool によってプログラムがクラッシュする可能性があります。これは、コンパイラが bool に特定の値 (0 や 1 など) があると想定し、初期化されていない bool に対して無効な操作でその値を使用した場合に発生する可能性があります。
たとえば、次のコードを考えてみましょう。 :
bool b; if (b) { // Do something }
コンパイラが b の値が 0 (false) であると想定した場合、「何かをする」ブロックにジャンプするコードを生成する可能性があります。 b が実際には初期化されていない場合でも。これにより、クラッシュが発生する可能性があります。
この問題を回避するには、bool 変数を使用する前に必ず初期化することが重要です。これは、デフォルトのコンストラクター:
bool b = false;
を使用して行うことができます。あるいは、三項演算子を使用して、条件に基づいて b の値を設定することもできます:
bool b = (condition) ? true : false;
以上が初期化されていないブール変数は C プログラムをクラッシュさせる可能性がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。