検索
  • サインイン
  • サインアップ
パスワードのリセットが成功しました

興味のあるプロジェクトをフォローし、それらに関する最新ニュースをチェックしてください

C のエラー処理

コレクション 205
リーディング 91672
更新時間 2016-09-11

C 言語はエラー処理の直接サポートを提供しませんが、システム プログラミング言語として、戻り値の形式で基になるデータにアクセスできます。エラーが発生すると、ほとんどの C または UNIX 関数呼び出しは 1 または NULL を返し、関数呼び出し中にエラーが発生したことを示すグローバル変数であるエラー コード errno を設定します。 <error.h> ヘッダー ファイルにはさまざまなエラー コードが含まれています。

そのため、C プログラマーは戻り値を確認し、戻り値に基づいて実行する適切なアクションを決定できます。開発者は、プログラムの初期化中に errno を 0 に設定する必要があります。これは、適切なプログラミング方法です。値 0 は、プログラムにエラーがないことを示します。

errno、perror()、およびstrerror()

C言語は、errnoに関連するテキストメッセージを表示するためのperror()およびstrerror()関数を提供します。

  • perror() 関数は、渡した文字列、その後にコロン、スペース、現在の errno 値のテキスト表現を表示します。

  • strerror() 関数は、現在の errno 値のテキスト表現を指すポインターを返します。

存在しないファイルを開こうとして、エラー状況をシミュレートしてみましょう。エラー メッセージを出力するにはさまざまな方法がありますが、ここでは関数を使用して使用法を示します。もう 1 つ注意すべき点は、すべてのエラーを出力するには 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, "错误号: %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
ホットAIツール
Undress AI Tool
Undress AI Tool

脱衣画像を無料で

AI Clothes Remover
AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undresser.AI Undress
Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

Stock Market GPT
Stock Market GPT

AIを活用した投資調査により賢明な意思決定を実現

人気のツール
メモ帳++7.3.1
メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版
SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6
ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版
SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)