Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語における単純なアサーションとは?assertマクロの基本と使い方

アサーション(表明)とは

アサーション(assertion:表明)とは、プログラムの実行がそのコード行に到達した時点で、特定の事実(条件)が必ず真でなければならないことを宣言するための文です。

アサーションを活用することで、「この時点ではこの条件が満たされているはずだ」という前提を明示的にチェックでき、想定外の状態やバグを早期に発見するのに役立ちます。

単純なアサーションの書き方

C言語では、assert.h ヘッダーファイルに用意されている assert(expression) マクロを使うことで、単純なアサーションを実装できます。

構文は以下の通りです。

assert(expression)

単純なアサーションの基本的な動作は次の通りです。

  • assert に渡した条件が真(true)の場合:何も起こらず、プログラムはそのまま続行します。
  • 条件が偽(false)の場合の動作は、コンパイラフラグの設定に完全に依存します。
  • アサーションが有効な場合:条件が偽になると、プログラムは停止(異常終了)します。
  • アサーションが無効な場合:何もチェックされず、何も起こりません。NDEBUG マクロを定義してコンパイルすると無効化できます。

なお、アサーションは主に内部のプログラミングエラー(論理バグ)を検出するためにのみ使用されます。これらのエラーは、関数に不正なパラメータが渡されることなどによって発生します。ユーザー入力のような実行時エラーへの対応には、if 文などによる通常のエラーチェックを使うのが適切です。

サンプルプログラム

以下は、C言語で単純なアサーションを使用したサンプルプログラムです。

#include <stdio.h>
#include <assert.h>
int main(void){
    int x;
    printf("Enter the value of x:\n");
    scanf("%d",&x);
    assert(x >= 0);
    printf("x = %d\n", x);
    return 0;
}

このプログラムでは、変数 x の値が 0 以上であることを assert() で確認しています。負の値が入力されるとアサーションが失敗し、プログラムが停止します。

実行結果

上記のプログラムを実行すると、次のような出力が得られます。

Run 1:
Enter the value of x:
20
x = 20
Run 2:
Enter the value of x:
-3
Assertion failed!
Program: G:\CP\CP programs\test.exe
File: G:\CP\CP programs\test.c, Line 10
Expression: x >= 0

Run 1 のように 0 以上の値を入力した場合は、そのまま処理が続行されて結果が表示されます。一方、Run 2 のように -3 を入力すると、「Assertion failed!」というエラーメッセージとともに、対象ファイル名・行番号・失敗した式が出力され、プログラムが強制終了します。このように、アサーションを使えば前提条件の破れを即座に検知できるため、デバッグ作業の効率化に大きく貢献します。

  1. C言語のstrcmp()関数とは?文字列比較の基本と使い方を徹底解説

    C言語の標準ライブラリ関数 int strcmp(const char *str1, const char *str2) は、ポインタ str1 が指し示す文字列と、str2 が指し示す文字列を比較するための関数です。C言語において、文字型の配列は「文字列」と呼ばれます。まずは文字列の基本的な扱い方から確認していきましょう。文字列の宣言文字列(文字配列)の宣言は以下のように行います。char stringname [size];例えば、char string[50]; と宣言すれば、最大50文字の長さを持つ文字列を格納できます。文字列の初期化文字列の初期化には、主に次の2つの方法があります。1

  2. C#プログラミングとは?初心者にもわかる特徴と基本を徹底解説

    C#(シーシャープ)とは何かC#は、Microsoft(マイクロソフト)が開発したモダンで汎用性の高いオブジェクト指向プログラミング言語です。Windowsアプリケーションの開発をはじめ、Webサービス、ゲーム開発(Unity)、業務システムなど、幅広い分野で活用されています。C#は「共通言語基盤(CLI:Common Language Infrastructure)」向けに設計されています。CLIは実行可能なコードとランタイム環境から構成されており、これにより異なるコンピュータプラットフォームやアーキテクチャ上で、さまざまな高水準言語を利用できるようになっています。C#の主な特徴C#には、開