ホームページ >バックエンド開発 >C++ >C および C99 では、「bool」から「int」への変換は常に予測どおりに動作しますか?

C および C99 では、「bool」から「int」への変換は常に予測どおりに動作しますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-16 16:07:17529ブラウズ

Will `bool` to `int` Conversions Always Behave Predictably in C   and C99?

Bool から Int への変換: 移植性とアサーション

C や C99 でも、開発者はブール値 (bool) から整数 (int) への暗黙的な変換を利用することがよくあります。 。ただし、コードの正確性を確保するには、この変換の移植性と影響を理解することが重要です。

次のコード スニペットを考えてみましょう。

int x = 4 < 5;
assert(x == 1);

x = 4 > 5;
assert(x == 0);

これらのアサーションの期待される出力は何ですか?すべてのコンテキストで渡されることが保証されていますか?

Bool から Int への変換の移植性

bool から int への暗黙的な変換は C 標準で定義されています。

  • bool の場合、「false」は 0 に変換され、「true」は 0 に変換されます。 1.
  • C99 では、_Bool が bool を置き換え、true/false がマクロである場合、同じ変換ルールが適用されます。

この変換は完全に移植性があり、すべての準拠コンパイラー間で正しい動作が保証されます。 .

の評価アサーション

変換ルールに基づいて、アサーションを評価できます。

  • 4 < 5 は true と評価され、1 に変換されます。したがって、x == 1 が成立します。
  • 4 > 5 は false と評価され、0 に変換されます。したがって、x == 0 が成り立ちます。

結論

提供されたコードのコンテキスト内で、アサーションはbool から int への変換が暗黙的に実行され、期待される値 (「true」の場合は 1、「false」の場合は 0) が正しく割り当てられるため、この結果は合格します。ただし、この動作は提示されたコード スニペットに限定されず、そのような変換が使用されるあらゆる状況に拡張されることに注意することが重要です。

以上がC および C99 では、「bool」から「int」への変換は常に予測どおりに動作しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。