首頁 > 後端開發 > C++ > 您的 C/C 程式碼是否做出了無根據的假設?

您的 C/C 程式碼是否做出了無根據的假設?

Mary-Kate Olsen
發布: 2024-10-31 04:22:31
原創
451 人瀏覽過

 Is Your C/C   Code Making Unwarranted Assumptions?

在 C/C 中展示無根據的假設

如何改進這個教育工具?

為了提高使用此工具,請考慮以下建議:

  • 合併條件編譯:使用條件編譯來測試基於特定平台特徵的假設。例如,如果您的測試程式依賴特定平台相關的功能,則可以使用 #ifdef 或 #if __GNUC__ 來根據不同的編譯器環境自訂測試。
  • 展開測試案例: 包括更廣泛的測試案例,以涵蓋程式設計師所做的更常見的假設。例如:

    • 「浮點算術是關聯的」
    • 「void* 的大小與最小可尋址單元的大小相同」
    • 「負數的符號始終是-”
  • 自動化測試: 建立腳本或自動化工具來執行測試並收集結果不同的平台。這將簡化測試過程,並更容易維護平台差異資料庫。

哪些測試會很好,它們應該是什麼樣子?

1.字元假設:

  • 檢定:驗證所有平台上的 'A' == 65。
  • 代碼:

    <code class="c">EXPECT("00 we have ASCII",('A'==65));</code>
    登入後複製
    登入後複製
  • 檢定:
  • 檢定:

    檢定:
    <code class="c">EXPECT("02 big letters come before small letters",('A'<'a'));
    登入後複製
    檢查假設> “A”有效。
  • 代碼:
  • 測試:
    <code class="c">EXPECT("04 a char is 8 bits",CHAR_BIT==8);
    登入後複製
測試:

測試:
    測試如果8 位。
  • 代碼:
  • <code class="c">EXPECT("06 integers are 2-complement and wrap around",(int_max+1)==(int_min));
    登入後複製
  • 2.整數🎜>
  • 檢定:
  • 檢查整數使用補碼表示和環繞的假設是否有效。
  • 程式碼:

    <code class="c">EXPECT("05 int has the size of pointers",sizeof(int)==sizeof(void*));
    登入後複製

檢定:

  • 檢定:
  • 檢定:

    檢定:
    不檢查的大小相同的斷言void* 在所有平台上均成立。
    <code class="c">EXPECT("10 void* can store function pointers",sizeof(void*)>=sizeof(void(*)()));</code>
    登入後複製
代碼:

  • 3 。指標假設:
  • 檢定:
    驗證 sizeof(void*) 總是大於或等於 sizeof(void(*)())。
    <code class="c">EXPECT("12 the stack grows downwards",check_grow(5,0)<0);</code>
    登入後複製
  • 程式碼:
  • 4.執行假設🎜>測試:測試堆疊是否始終向下增長。 代碼:測試: 檢查表達式求值始終從左到右的假設。 代碼:
    <code class="c">EXPECT("00 we have ASCII",('A'==65));</code>
    登入後複製
    登入後複製

您會在您可以使用的平台上執行測試並發布結果嗎?

我們鼓勵社群參與在不同平台上測試假設。請分享您的結果以及以下資訊:

  • 平台詳細資訊(作業系統、編譯器版本、架構)
  • 與預期結果觀察到的任何差異
  • 原因可能會出現差異(例如,編譯器最佳化、特定於平台的實作)

以上是您的 C/C 程式碼是否做出了無根據的假設?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板