C++ でアサートするメッセージを追加する

Zeeshan Afridi 2023年10月12日
  1. C++ でアサート
  2. C++ でのアサートの利点
  3. C++ のアサートでカスタムメッセージを表示する
  4. C++ の Assert でカスタムメッセージをカスタマイズする
  5. まとめ
C++ でアサートするメッセージを追加する

アサートは、開発者とテスターがアプリケーションをデバッグおよびテストするのに役立つ C++ のエラー処理メカニズムの 1つです。

これらはブール式であり、プログラム内の論理式のテストを使用し、エラーが検出されない場合は true を返します。それ以外の場合、プログラムは終了し、エラーが表示されます。

これは、適切に実行するために満たす必要がある、またはその他の方法で終了する必要があるいくつかの制約がある場合に使用されます。

cpp アサート

C++ でアサート

車の速度は 0 以上で、光速より大きくてはいけないとしましょう。

Assert(speed<0 && speed> speed_of_light)
  1. この式には、違反してはならない 2つの制約があります。
  2. 経験によれば、プログラミングのアサーションは、プログラムのバグを検出して修正するための効果的で最速の方法の 1つです。
  3. 経験によれば、プログラミング中にアサーションを作成することは、バグを検出して修正するための最も迅速で効果的な方法の 1つです。

アサートは、プログラムの条件式を評価するために使用されるプリプロセッサマクロです。

Assert(Condition)

    assert(x < 10)

この式は、スムーズに実行するには、x10 未満である必要があることを示しています。そうしないと、プログラムが終了してエラーがスローされます。

たとえば、truefalse の 2つの条件付きパスでプログラムを実行しています。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 マクロにコードを記述します。このコードは、プログラムがエラーを発生させることなく通過する必要があります。

テストとデバッグで 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