Latest web development tutorials

Cエラー処理

C言語は、エラー処理のための直接的なサポートを提供していませんが、システムのプログラミング言語として、それはフォームの値を使用すると、基になるデータにアクセスすることができます返します。 エラーが発生した場合、UNIXまたはC関数呼び出しが戻る1またはNULLのほとんどは、エラーコードもerrnoを設定ますこのエラーコードがグローバル変数である関数呼び出しエラーが発生した時に、それが発現しました。 あなたはエラーコード<error.h>ヘッダ・ファイルの様々を見つけることができます。

そのため、Cプログラマは、適切な処置とは、戻り値に基づいて決定を行うもの確認することで値を返すことができます。 開発者は、プログラムの初期化時に、errnoが良いプログラミングの練習である、0に設定する必要があります。 0の値は、プログラムがエラーなしことを示しています。

errnoに、perrorは()とにstrerror()

C言語は、perrorは()とエラー番号に関連付けられたテキストメッセージを表示するためにstrerror()関数を提供します

  • perrorは()は、コロン、スペースと現在のerrno値のテキスト表現を続けてパスの文字列を表示するように機能します。
  • strerror()関数はerrnoをテキスト表現の現在の値へのポインタを返します。

のがfalseの場合、存在しないファイルを開こうとをシミュレートしてみましょう。 あなたは出力にエラーメッセージをいくつかの方法を使用することができ、ここでは使用方法を実証するために関数を使用します。 注意すべきもう一つは、あなたはすべてのエラーを標準エラー出力ファイルストリームを使用する必要があります。

#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, "错误号: %d\n", errno);
      perror("通过 perror 输出错误");
      fprintf(stderr, "打开文件错误: %s\n", strerror( errnum ));
   }
   else
   {
      fclose (pf);
   }
   return 0;
}

上記のコードはコンパイルされ、実行されると、次の結果を生成します。

错误号: 2
通过 perror 输出错误: No such file or directory
打开文件错误: 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, "除数为 0 退出运行...\n");
      exit(-1);
   }
   quotient = dividend / divisor;
   fprintf(stderr, "quotient 变量的值为 : %d\n", quotient );

   exit(0);
}

上記のコードはコンパイルされ、実行されると、次の結果を生成します。

除数为 0 退出运行...

プログラムの終了ステータス

通常の状況下では、通常の運転時間後のプログラムの実装を成功させるには、値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, "除数为 0 退出运行...\n");
      exit(EXIT_FAILURE);
   }
   quotient = dividend / divisor;
   fprintf(stderr, "quotient 变量的值为: %d\n", quotient );

   exit(EXIT_SUCCESS);
}

上記のコードはコンパイルされ、実行されると、次の結果を生成します。

quotient 变量的值为 : 4