0Pricing
C Academy · レッスン

Cの例外処理

組み込みの例外処理がないCで、堅牢なエラー処理戦略を実装します

「Cの例外処理」はCoddyKit上の無料C Academyレッスンです。 これはレッスン3/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C Academyコースには全3レッスンが含まれています。

例外処理入門

Cの例外処理

C++やJavaなどの言語とは異なり、Cには組み込みの例外処理機能がありません。

このレッスンでは、次のことを学びます:

  • 戻り値を使ってエラーを処理する方法
  • setjmpとlongjmpを使って例外処理を行う方法
  • errnoを使ってシステムエラーを処理する方法
Cの例外処理 — イラスト1

戻り値を使ったエラー処理

戻り値を使ったエラー処理

Cでエラーを処理する最も簡単な方法は、戻り値を使うことです。

例:

int divide(int a, int b) { if (b == 0) return -1; // Error code return a / b; }

呼び出し元は、戻り値を確認してエラーの有無を判断します。

例:戻り値を使ったエラー処理

例:戻り値を使ったエラー処理

このプログラムは、戻り値を使ってゼロ除算をチェックします。

#include <stdio.h>

int divide(int a, int b) {
    if (b == 0) {
        printf("Error: Division by zero!\n");
        return -1;
    }
    return a / b;
}

int main() {
    int result = divide(10, 0);
    if (result != -1) {
        printf("Result: %d\n", result);
    }
    return 0;
}

setjmpとlongjmpを使ったエラー処理

setjmpとlongjmpを使ったエラー処理

setjmp関数とlongjmp関数を使うと、非局所ジャンプを実行して例外処理を再現できます。

手順:

  • setjmp()を使って復帰ポイントを設定します。
  • エラーが発生したときにlongjmp()を使ってそのポイントへ戻ります。

例:setjmpとlongjmpを使う

例:setjmpとlongjmpを使う

このプログラムは、エラー処理にsetjmpとlongjmpを使います。

#include <stdio.h>
#include <setjmp.h>

jmp_buf buffer;

void errorHandler() {
    printf("Error occurred! Jumping back to safe state.\n");
    longjmp(buffer, 1);
}

int main() {
    if (setjmp(buffer) == 0) {
        printf("Executing main program...\n");
        errorHandler();
    } else {
        printf("Recovered from error.\n");
    }
    return 0;
}

システムエラーにerrnoを使う

システムエラーにerrnoを使う

errno変数には、システムコールから返されたエラーコードが格納されます。

例:

#include

fopen()のような関数は、エラーが発生するとerrnoを設定します。

例:ファイル処理にerrnoを使う

例:ファイル処理にerrnoを使う

このプログラムは、存在しないファイルを開くときにerrnoを確認します。

#include <stdio.h>
#include <errno.h>

int main() {
    FILE *file = fopen("nonexistent.txt", "r");
    if (!file) {
        perror("Error opening file");
    }
    return 0;
}

エラー処理のベストプラクティス

エラー処理のベストプラクティス

エラーを効果的に管理するには:

  • 関数の戻り値を確認します。
  • システムエラーにはerrnoを使います。
  • 必要な場合に限り、setjmpとlongjmpを使います。

まとめ

まとめ

このレッスンでは、次のことを学びました:

  • 戻り値を使ってエラーを処理する方法
  • setjmpとlongjmpで例外処理を再現する方法
  • システムエラーの検出にerrnoを使う方法

Cのデバッグとエラー処理のセクションはこれで終了です!

Cの例外処理 — イラスト10

よくある質問

「Cの例外処理」レッスンは無料ですか?

はい。「Cの例外処理」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C Academyコースには全3レッスンが含まれています。

「Cの例外処理」で何を学びますか?

組み込みの例外処理がないCで、堅牢なエラー処理戦略を実装します ブラウザで直接実行するハンズオンコードでC Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/3です。

「Cの例外処理」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC Academyレッスンでコードを書いて実行できますか?

はい。すべてのC Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. GDBによるデバッグ
  2. よくある実行時エラー
  3. Cの例外処理
← C Academyに戻る