c言語のエラー処理

9678 ワード

Cエラー処理
C言語はエラー処理の直接的なサポートを提供しませんが、システムプログラミング言語として、下位データにアクセスできる値を返す形式です.エラーが発生した場合、ほとんどのCまたはUNIX関数呼び出しは1またはNULLを返し、関数呼び出し中にエラーが発生したことを示すグローバル変数であるエラーコードerrnoが設定されます.ヘッダファイルには様々なエラーコードが見つかります.
したがって,Cプログラマは戻り値をチェックし,戻り値に基づいてどの適切な動作をとるかを決定することができる.開発者はプログラムの初期化時にerrnoを0に設定すべきで、これは良いプログラミング習慣です.0の値はプログラムにエラーがないことを示します.
errno、perror()およびstrerror()
C言語はperror()とstrerror()関数を提供し、errnoに関連するテキストメッセージを表示する.
  • perror()関数には、送信した文字列が表示され、コロン、スペース、現在のerrno値のテキストとともに表示されます.
  • strerror()関数は、現在のerrno値のテキスト表現形式を指すポインタを返します.

  • エラーをシミュレートして、存在しないファイルを開いてみましょう.エラーメッセージを出力する方法はいくつかありますが、ここでは関数を使用して使い方を説明します.また、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
    "
    , errno); perror("Error printed by perror"); fprintf(stderr, "Error opening file: %s
    "
    , 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...
    "
    ); exit(-1); } quotient = dividend / divisor; fprintf(stderr, "Value of quotient : %d
    "
    , quotient ); exit(0); }

    上記のコードがコンパイルおよび実行されると、次の結果が得られます.
    Division by zero! Exiting...

    プログラム終了状態
    通常、プログラムが正常に終了するとEXIT_の値が付きますSUCCESS.ここで、EXIT_SUCCESSはマクロで、0と定義されています.
    プログラムにエラーがある場合は、プログラムを終了すると状態値EXIT_が付きますFAILUREは、-1と定義されています.だから、上のプログラムは次のように書くことができます.
    #include <stdio.h>
    #include <stdlib.h>
    
    main()
    {
       int dividend = 20;
       int divisor = 5;
       int quotient;
     
       if( divisor == 0){
          fprintf(stderr, "Division by zero! Exiting...
    "
    ); exit(EXIT_FAILURE); } quotient = dividend / divisor; fprintf(stderr, "Value of quotient : %d
    "
    , quotient ); exit(EXIT_SUCCESS); }

    上記のコードがコンパイルおよび実行されると、次の結果が得られます.
    Value of quotient : 4