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

C/C++におけるアサーション(assert)の使い方と基本をわかりやすく解説

この記事では、C/C++におけるアサーション(assert)について詳しく解説します。アサーションとは、プログラムの実行中に特定の条件が満たされているかどうかを検証し、問題があれば診断情報を出力する仕組みです。

C標準ライブラリには、void assert(int expression) というマクロが用意されており、これを使うことで診断情報を標準エラー出力(stderr)に書き込むことができます。つまり、Cプログラムに簡単にデバッグ用のチェックを組み込むことができるのです。

assert() マクロの宣言

assert() マクロは、ヘッダーファイル <assert.h> 内で以下のように宣言されています。

void assert(int expression);

パラメータの説明

assert() マクロが受け取るパラメータは expression(式) です。これは変数でも任意のC言語の式でも構いません。

  • expression が TRUE(真)と評価された場合: assert() は何もせず、プログラムはそのまま続行されます。
  • expression が FALSE(偽)と評価された場合: 標準エラー出力(stderr:エラーメッセージや診断情報を表示するためのストリーム)にエラーメッセージが出力され、プログラムの実行が中断(abort)されます。

サンプルコード

以下は、assert() を使ってユーザーの入力値を検証する簡単な例です。

#include <assert.h>
#include <stdio.h>
int main () {
    int a;
    char str[50];
    printf("Enter an integer value: ");
    scanf("%d", &a);
    assert(a >= 10);
    printf("Integer entered is %d\n", a);
    printf("Enter string: ");
    scanf("%s", &str);
    assert(str != NULL);
    printf("String entered is: %s\n", str);
    return(0);
}

実行結果

Enter an integer value: 11
Integer entered is 11
Enter string: tutorialspoint
String entered is: tutorialspoint

この例では、入力された整数が10以上であることを assert(a >= 10) で確認しています。もし10未満の値が入力された場合、プログラムはエラーメッセージを表示して強制終了します。

まとめ

アサーションは、開発段階で論理的な誤りや想定外の状態を早期に発見するための強力なツールです。ただし、リリース版のビルドでは NDEBUG を定義することで assert() を無効化できるため、本番環境でのパフォーマンスへの影響を抑えることも可能です。デバッグ時の安全性確保にぜひ活用してみてください。

  1. C/C++のmemcpy()関数の使い方と実例解説

    この記事では、C++ STLにおけるmemcpy()関数の動作、構文、および具体的な使用例について詳しく解説します。 memcpy()とは? memcpy()関数は、C++ STLに組み込まれた標準関数の一つで、<cstring>ヘッダーファイルで定義されています。この関数はメモリブロックをコピーするために使用され、あるメモリ位置から別のメモリ位置へ、指定されたバイト数分のデータを転送します。 関数の実行結果は、データのバイナリコピーとなります。重要な点として、memcpy()は終端のNULL文字やその他の終端記号をチェックしません。単純にソースから指定されたバイト数(num)をそ

  2. C/C++で学ぶAA木(AA Tree)とは?基本概念と平衡化操作を徹底解説

    AA木(AA Tree)とはコンピュータサイエンスにおいて、AA木(AA Tree)とは、順序付きデータを効率的に格納・検索するために実装された平衡木(バランスドツリー)の一種です。AA木は、赤黒木(Red-Black Tree)の変種として扱われます。赤黒木は二分探索木の一形態であり、要素の追加や削除を効率的にサポートします。赤黒木と大きく異なる点は、AA木では赤いノードを右の子としてのみ追加でき、左の子としては配置できないという制約があることです。この制約により、2-3-4木ではなく2-3木をシミュレートすることになり、その結果、木の保守操作が大幅に簡素化されます。赤黒木の平衡化アルゴリズ