したがって、Cプログラマは戻り値をチェックし、戻り値に応じて適切な処置を取ることができます。 プログラムの初期化時にerrnoを0に設定するのがよい方法です。 0の値は、プログラムにエラーがないことを示します。
errno、perror()。 とstrerror()
Cプログラミング言語は、errnoに関連付けられたテキストメッセージを表示するために使用できるperror()関数とstrerror()関数を提供しています。
- 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
No comments:
Post a Comment