Cライブラリマクロ -assert()
説明
Cライブラリマクロvoid assert(int expression)診断情報を標準エラーファイルに書き込むことを許可します。言い換えれば、Cプログラムに診断を追加するために使用できます。
assert()はC標準ライブラリ内のマクロであり、<assert.h>ヘッダーファイル内で定義されています。これはプログラム実行時に式が真であるかどうかをチェックするために使用されます。式が偽の場合、assert()マクロはエラーメッセージを出力し、プログラムの実行を終了します。
assert() はデバッグとテストに非常に役立ちます。
assert()これは強力なツールであり、開発者がプログラム実行時に条件をチェックし、条件が満たされない場合に詳細なエラーメッセージを提供するのに役立ちます。
宣言
以下は assert() マクロの宣言です:
#include <assert.h> assert(expression);
パラメータ
- expression-- チェックしたい条件式。これは変数または任意のC式にすることができます。もしexpression式が TRUE の場合、assert() は何も実行しません。もしexpression式が FALSE の場合、assert() は標準エラー stderr にエラーメッセージを表示し、プログラムの実行を中止します。
expression の値が偽(0)の場合、assert() は以下の情報を含むエラーメッセージを出力します:
- アサーション失敗を引き起こした式のテキスト表現
- ソースファイル名
- 行番号
- 関数名(利用可能な場合)
その後、プログラムは abort() 関数を呼び出して実行を終了します。
戻り値
このマクロは値を返しません。
例
以下の例は assert() マクロの使用方法を示しています。
例
#include <assert.h>
#include <stdio.h>
int main()
{
int a;
char str[50];
printf("整数値を入力してください:");
scanf("%d", &a);
assert(a >= 10);
printf("入力された整数は: %d\n", a);
printf("文字列を入力してください:");
scanf("%s", str);
assert(str != NULL);
printf("入力された文字列は: %s\n", str);
return(0);
}
上のプログラムをインタラクティブモードでコンパイルして実行してみましょう:
请输入一个整数值: 11 输入的整数是: 11 请输入字符串: サンプル 输入的字符串是: サンプル
アサーションの無効化
リリース版では、パフォーマンスを向上させるためにアサーションを無効にしたい場合があります。これは NDEBUG を定義することで実現できます:
#define NDEBUG #include <assert.h>
NDEBUG が定義されると、すべての assert() マクロはプリプロセッサによって空の文に置き換えられ、何のチェックも行われません。
使用上のアドバイス
- デバッグ:開発・デバッグ段階で、使用
assert()すると、論理エラーを早期に発見するのに役立ちます。 - ドキュメント:を通じて
assert()プログラマーのコードに対する仮定や期待を明確に表現でき、これはコードの保守や読解に非常に役立ちます。 - 防御的プログラミング:ただし
assert()予測可能なランタイムエラーの処理に使用すべきではありませんが、プログラミングエラーを捕捉する効果的な手段です。
注意事項
- パフォーマンス:パフォーマンスが重要なコードでは、アサーションは追加のオーバーヘッドを増加させる可能性があるため、通常はリリース版で無効にされます。
- エラーハンドリング:
assert()予期されるエラー状況の処理に使用すべきではなく、プログラマーエラーの捕捉に使用すべきです。
C標準ライブラリ - <assert.h>