ホームページ  >  記事  >  バックエンド開発  >  C/C プログラマがよく立てる根拠のない仮定は何ですか?

C/C プログラマがよく立てる根拠のない仮定は何ですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-30 18:37:31753ブラウズ

What Unfounded Assumptions Do C/C   Programmers Often Make?

C/C プラットフォームにはどのような根拠のない仮定が存在しますか?

はじめに

多くの初心者および経験豊富な C および C プログラマが頻繁に参加します誤った仮定を立てて、誤ったコードを引き起こす可能性があります。このような根拠のない仮定を認識し、異議を唱えることは、コーディングの実践を改善するために非常に重要です。

テストの推奨事項

これらの仮定を実証し、異議を唱えるために、さまざまな「考えられる」ことを調べる次のテスト プログラムを検討してください。 " プログラマによって一般的に行われる仮定:

<code class="c">#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>

int main() {
    // Character-related Assumptions
    EXPECT("00: ASCII is consistent", ('A' == 65));
    EXPECT("01: A-Z forms a contiguous block", (('Z' - 'A') + 1 == 26));
    EXPECT("02: Uppercase letters precede lowercase letters", ('A' < 'a'));
    EXPECT("03: A character is 8 bits", (CHAR_BIT == 8));
    EXPECT("04: Characters are signed", (CHAR_MIN == SCHAR_MIN));
}</code>

追加のテスト

  • 整数の仮定:

    • 整数の 2 の補数の動作をテストします: (int_max 1) == (int_min) および (INT_MAX 1) == (INT_MIN)
    • オーバーシフトが常に安全かどうかを確認します: (1 << bits_per_int) == 0 および (1 << BITS_PER_INT) == 0
    • 負のシフトの場合でも、左から右へのシフトが正しく機能するかどうかを調べます: (t = -1, (15 << ; t) == 7)
  • ポインターの仮定:

    • void* が関数ポインターを格納できるかどうかをテストします: sizeof (void*) >= sizeof(void(*)())
  • 実行の仮定:

    • チェックスタックの成長方向の検出が信頼できる場合: check_grow(5, 0) != 0 および check_grow(5, 0)
  • その他の仮定:

    • sizeof(char) が sizeof(short)、sizeof( short) が sizeof(int) より小さく、sizeof(int) が sizeof(long) より小さい
    • size_t と ptrdiff_t が同じサイズかどうかを判断します: sizeof(size_t) == sizeof(ptrdiff_t)
    • 関数呼び出しを使用した場合でも、部分式の左から右への評価が一貫しているかどうかを調べます: (ltr_fun(1) * ltr_fun(2) * ltr_fun(3) * ltr_fun(4), ltr_result == 1234)

参加と共同開発

プロジェクトに貢献するには、次のプラットフォームを検討してください:

  • GitHub リポジトリ: https://github.com/lutherblissett/disenchanter
  • スタック オーバーフロー ディスカッション: [元のスタック オーバーフローの質問へのリンク]

パッチを送信したり、新しいアイデアを提供したりすることで、テスト プログラムの精度と包括性を向上させることができます。

以上がC/C プログラマがよく立てる根拠のない仮定は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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