在 C++ 中將訊息新增到斷言

Zeeshan Afridi 2023年10月12日
  1. C++ 中的斷言
  2. C++ 中斷言的優點
  3. 在 C++ 中的 Assert 中顯示自定義訊息
  4. 在 C++ 中自定義 Assert 中的自定義訊息
  5. まとめ
在 C++ 中將訊息新增到斷言

斷言是 C++ 中的錯誤處理機制之一,可幫助開發人員和測試人員除錯和測試應用程式。

這些是布林表示式,使用程式中邏輯表示式的測試,如果沒有檢測到錯誤,則返回 true;否則,程式終止,並顯示錯誤。

當我們有一些約束需要滿足才能正常執行或以其他方式終止時使用它。

cpp 斷言

C++ 中的斷言

假設汽車的速度不應小於 0 且大於光速。

Assert(speed<0 && speed> speed_of_light)
  1. 我們在這個表示式中有兩個不應該違反的約束。
  2. 經驗表明,程式設計中的斷言是檢測和糾正程式錯誤的最有效和最快捷的方法之一。
  3. 經驗表明,在程式設計時編寫斷言是檢測和糾正錯誤的最快和最有效的方法之一。

斷言是用於評估程式中的條件表示式的前處理器巨集。

Assert(Condition)

    assert(x < 10)

這個表示式告訴我們 x 應該小於 10 才能順利執行;否則,程式將被終止並丟擲錯誤。

例如,我們正在執行一個具有兩個條件路徑的程式:truefalse。對於 true 路徑,程式將順利執行而不會丟擲錯誤,而在 false 路徑中,程式將終止並顯示錯誤。

錯誤通常由失敗的條件表示式、程式的路徑和發生錯誤的行號組成。

這有助於我們瞭解錯誤的發生,從而使測試和除錯更加高效和容易。

程式碼示例:

#include <cassert>

int main() {
  int x = 3;
  x = 7;
  assert(x == 3);
  return 0;
}

輸出:

Assertion failed: x==3, file E:\Client Project \Codes\assertCodes.cpp,, line 7

C++ 中斷言的優點

斷言是非常有效和方便的錯誤處理機制,可以幫助我們以多種方式檢測程式碼中的錯誤。它採用了測試驅動的方式,即在開發之前編寫測試用例,然後根據測試用例開始開發。

同樣,我們在 assert 巨集中編寫了一些程式碼,程式應該通過它而不會導致錯誤。

在測試和除錯中使用斷言的一些優點。

  1. 斷言幫助我們進行錯誤檢測。
  2. 它提供了更好的可觀察性。
  3. 它還可以幫助我們通過行號識別錯誤原因和錯誤路徑。
  4. 可以新增自定義錯誤資訊;其他測試人員和程式設計師也可以更人性化地理解錯誤。
  5. 它幫助我們建立無錯誤的邏輯。
  6. 高效的測試和除錯。

在 C++ 中的 Assert 中顯示自定義訊息

我們還可以使用方法在 assert 巨集中顯示自定義訊息,這是一個有效且方便的選項。它以更人性化的方式指示和解釋錯誤。

小型團隊在大型軟體組織中致力於軟體的每個部分,有些是設計,有些是編碼和測試。因此,編寫帶有自定義訊息的斷言巨集對於其他人分析和理解錯誤的性質和原因非常有幫助。

程式碼示例:

#include <cassert>

int main() {
  int dividend = 4;
  int divisor = 0;
  assert(("Message: Anything divided by 0 is undefined", divisor != 0));
  int divison = dividend / divisor;
  return 0;
}

輸出:

Assertion failed: ( "Message: Anything divided by 0 is undefined", divisor != 0), file E:\Client Project \Codes\assertCodes.cpp,, line 6

在這個程式中,我們將 4 除以 0 (4/0),但正如我們所知,我們不能將任何數字除以 0,因此正如預期的那樣,這將引發錯誤。為了提高錯誤的可讀性,我們新增了一條自定義訊息。

在 C++ 中自定義 Assert 中的自定義訊息

#include <cassert>
#include <iostream>
using namespace std;
bool print_if_false(const bool assertion, const char* message) {
  if (!assertion) {
    cout << message << endl;
  }
  return assertion;
}
int main() {
  int dividend = 4;
  int divisor = 0;
  assert(print_if_false(divisor != 0,
                        "Message: Anything divided by 0 is undefined"));
  return 0;
}

輸出:

Message: Anything divided by 0 is undefined
Assertion failed: print_if_false(divisor != 0,"Message: Anything divided by 0 is undefined" ), file E:\Client Project \Codes\assertCodes.cpp, line 18

這與上面的示例相同,但它是自定義的。功能總體上是一樣的。

我們建立了自定義函式以在單獨的行上顯示訊息。

目的是提高可讀性並瞭解我們如何自定義斷言巨集來顯示自定義訊息。

まとめ

在本文中,我們瞭解了 C++ 中的 assert() 語句、它的工作原理以及 assert() 的優點。除此之外,我們還看到了 assert() 的語法以及如何顯示自定義訊息以提高錯誤的可讀性。

作者: Zeeshan Afridi
Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn