首頁  >  文章  >  後端開發  >  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>

其他測試

  • 整數假設:

    • 整數假設:
    • 整數假設整數的補碼行為:(int_max 1) == (int_min) 與(INT_MAX 1) == (INT_MIN)
    驗證過度移位是否總是安全:(1
  • 檢查從左向右移位是否正確,即使是負移位:(t = -1, (15
    • 指標假設:
  • 測試void* 是否可以儲存函數指標:sizeof (void*) >= sizeize(void( *)())

    • 執行假設:
  • 檢查如果偵測堆疊成長方向可靠: check_grow(5, 0) != 0 且check_grow(5, 0)
    • 其他假設:
    • 其他假設:
驗證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/lutherblisset/disenchanterStack Overflow 討論: [ []原始 Overflow 問題的原始 Overflow連結]透過提交補丁或提供新的想法,可以幫助提高測試程序的準確性和全面性。

以上是C/C 程式設計師經常做出哪些毫無根據的假設?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn