C - エラー処理
そのため、C プログラミングはエラー処理を直接サポートしていませんが、システム プログラミング言語であるため、戻り値の形式で下位レベルにアクセスできます。ほとんどの C または Unix 関数呼び出しは、エラーが発生した場合に -1 または NULL を返し、エラー コード errno を設定します。 .これはグローバル変数として設定され、関数呼び出し中に発生したエラーを示します。
したがって、C プログラマーは戻り値をチェックし、戻り値に応じて適切なアクションを実行できます。プログラムの初期化時に errno を 0 に設定することをお勧めします。値 0 は、プログラムにエラーがないことを示します。
errno、perror()。と strerror()
C プログラミング言語は perror() を提供します および strerror() errno に関連付けられたテキスト メッセージを表示するために使用できる関数 .
- <リ>
perror() 関数は、渡された文字列、コロン、スペース、現在の errno 値のテキスト表現を表示します。
<リ>strerror() この関数は、現在の errno 値のテキスト表現へのポインターを返します。
エラー状態をシミュレートして、存在しないファイルを開こうとしましょう。ここでは使用法を示すために両方の関数を使用していますが、エラーを出力する方法は 1 つまたは複数使用できます。 2 つ目の重要な点は、stderr を使用する必要があることです。 すべてのエラーを出力するためのファイル ストリーム
#include <stdio.h>
#include <errno.h>
#include <string.h>
extern int errno ;
int main () {
FILE * pf;
int errnum;
pf = fopen ("unexist.txt", "rb");
if (pf == NULL) {
errnum = errno;
fprintf(stderr, "Value of errno: %d\n", errno);
perror("Error printed by perror");
fprintf(stderr, "Error opening file: %s\n", strerror( errnum ));
} else {
fclose (pf);
}
return 0;
}
上記のコードをコンパイルして実行すると、次の結果が生成されます −
Value of errno: 2 Error printed by perror: No such file or directory Error opening file: No such file or directory
エラーをゼロで割る
数値を除算する際に、プログラマーが除数がゼロかどうかをチェックせず、最終的に実行時エラーが発生することはよくある問題です。
以下のコードは、割る前に除数がゼロかどうかをチェックすることでこれを修正します −
ライブデモ
#include <stdio.h>
#include <stdlib.h>
main() {
int dividend = 20;
int divisor = 0;
int quotient;
if( divisor == 0){
fprintf(stderr, "Division by zero! Exiting...\n");
exit(-1);
}
quotient = dividend / divisor;
fprintf(stderr, "Value of quotient : %d\n", quotient );
exit(0);
}
上記のコードをコンパイルして実行すると、次の結果が生成されます −
Division by zero! Exiting...
プログラム終了ステータス
操作が成功した後にプログラムが終了する場合、EXIT_SUCCESS の値で終了するのが一般的な方法です。ここで、EXIT_SUCCESS はマクロであり、0 として定義されています。
プログラムにエラー条件があり、終了しようとしている場合は、-1 として定義されているステータス EXIT_FAILURE で終了する必要があります。それでは、上記のプログラムを次のように書きましょう −
ライブデモ
#include <stdio.h>
#include <stdlib.h>
main() {
int dividend = 20;
int divisor = 5;
int quotient;
if( divisor == 0) {
fprintf(stderr, "Division by zero! Exiting...\n");
exit(EXIT_FAILURE);
}
quotient = dividend / divisor;
fprintf(stderr, "Value of quotient : %d\n", quotient );
exit(EXIT_SUCCESS);
}
上記のコードをコンパイルして実行すると、次の結果が生成されます −
Value of quotient : 4
C言語