【C言語】よく使用する関数一覧

この記事では、C言語プログラミングにおいてよく使用される関数について解説します。

目次から探す

入出力関数

プログラミングにおいて、データの入力や出力は非常に重要です。

C言語では、以下のような入出力関数がよく使用されます。

printf関数

#include <stdio.h>
int main() {
    int num = 10;
    printf("数字: %d\n", num);
    return 0;
}

上記のコードでは、printf関数を使用して変数numの値を表示しています。

printf関数は、指定した書式に従ってデータを出力するために使用されます。

%dは整数を表示するための書式指定子であり、numの値が表示されます。

scanf関数

#include <stdio.h>
int main() {
    int num;
    printf("数字を入力してください: ");
    scanf("%d", &num);
    printf("入力された数字: %d\n", num);
    return 0;
}

上記のコードでは、scanf関数を使用してユーザーからの入力を受け取っています。

%dは整数を受け取るための書式指定子であり、&演算子を使用して変数numのアドレスを渡しています。

入力された値は変数numに格納され、その後、printf関数を使用して表示されます。

getchar関数

#include <stdio.h>
int main() {
    char ch;
    printf("文字を入力してください: ");
    ch = getchar();
    printf("入力された文字: %c\n", ch);
    return 0;
}

上記のコードでは、getchar関数を使用してユーザーからの文字入力を受け取っています。

getchar関数は、1文字ずつ入力を受け取ります。

入力された文字は変数chに格納され、その後、printf関数を使用して表示されます。

putchar関数

#include <stdio.h>
int main() {
    char ch = 'A';
    printf("文字: ");
    putchar(ch);
    printf("\n");
    return 0;
}

上記のコードでは、putchar関数を使用して文字を出力しています。

putchar関数は、1文字を出力するために使用されます。

変数chに格納された文字が表示されます。

これらの入出力関数を使用することで、プログラムの実行中にデータの入力や出力を行うことができます。

文字列関数

文字列を扱う際によく使用する関数について説明します。

strlen関数

strlen関数は、指定された文字列の長さを返す関数です。

文字列の長さは、終端のヌル文字を含まずにカウントされます。

#include <stdio.h>
#include <string.h>
int main() {
    char str[] = "Hello, World!";
    int length = strlen(str);
    
    printf("文字列の長さ: %d\n", length);
    
    return 0;
}
文字列の長さ: 13

strcpy関数

strcpy関数は、指定された文字列を別の文字列にコピーする関数です。

#include <stdio.h>
#include <string.h>
int main() {
    char src[] = "Hello";
    char dest[10];
    
    strcpy(dest, src);
    
    printf("コピーされた文字列: %s\n", dest);
    
    return 0;
}
コピーされた文字列: Hello

strcat関数

strcat関数は、指定された2つの文字列を連結する関数です。

#include <stdio.h>
#include <string.h>
int main() {
    char str1[20] = "Hello";
    char str2[] = ", World!";
    
    strcat(str1, str2);
    
    printf("連結された文字列: %s\n", str1);
    
    return 0;
}
連結された文字列: Hello, World!

strcmp関数

strcmp関数は、2つの文字列を比較する関数です。

比較結果は、0より小さい場合は最初の文字列が辞書順で前に来ることを示し、0の場合は2つの文字列が等しいことを示し、0より大きい場合は最初の文字列が辞書順で後に来ることを示します。

#include <stdio.h>
#include <string.h>
int main() {
    char str1[] = "apple";
    char str2[] = "banana";
    
    int result = strcmp(str1, str2);
    
    if (result < 0) {
        printf("%s は %s より前に来ます\n", str1, str2);
    } else if (result == 0) {
        printf("%s と %s は等しいです\n", str1, str2);
    } else {
        printf("%s は %s より後に来ます\n", str1, str2);
    }
    
    return 0;
}
apple は banana より前に来ます

以上が、C言語でよく使用する文字列関数の説明です。

これらの関数を使うことで、文字列の長さを取得したり、文字列をコピーしたり、連結したり、比較したりすることができます。

数値計算関数

数値計算に関する処理を行うための関数について説明します。

abs関数

abs関数は、与えられた整数の絶対値を返す関数です。

絶対値とは、数値の符号を無視した値のことです。

#include <stdio.h>
#include <stdlib.h>
int main() {
    int num = -10;
    int absNum = abs(num);
    
    printf("絶対値: %d\n", absNum);
    
    return 0;
}
絶対値: 10

pow関数

pow関数は、与えられた数のべき乗を計算する関数です。

第1引数に底となる数、第2引数に指数を指定します。

#include <stdio.h>
#include <math.h>
int main() {
    double base = 2.0;
    double exponent = 3.0;
    double result = pow(base, exponent);
    
    printf("結果: %.2f\n", result);
    
    return 0;
}
結果: 8.00

sqrt関数

sqrt関数は、与えられた数の平方根を計算する関数です。

#include <stdio.h>
#include <math.h>
int main() {
    double num = 16.0;
    double squareRoot = sqrt(num);
    
    printf("平方根: %.2f\n", squareRoot);
    
    return 0;
}
平方根: 4.00

rand関数

rand関数は、乱数を生成する関数です。

乱数は実行するたびに異なる値が生成されます。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
    // 乱数のシードを設定
    srand(time(NULL));
    
    // 0から99までの乱数を生成
    int randomNumber = rand() % 100;
    
    printf("乱数: %d\n", randomNumber);
    
    return 0;
}
乱数: 42

以上が数値計算関数についての説明です。

これらの関数を使うことで、数値計算に関する処理を簡単に行うことができます。

配列関数

配列は、複数のデータをまとめて扱うためのデータ構造です。

C言語では、配列を操作するための便利な関数がいくつか用意されています。

以下では、よく使用される配列関数について説明します。

sizeof関数

sizeof関数は、指定したデータ型または変数のメモリサイズをバイト単位で返す関数です。

配列の要素数を求める際によく使用されます。

#include <stdio.h>
int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int size = sizeof(arr) / sizeof(arr[0]);
    printf("配列の要素数: %d\n", size);
    return 0;
}

上記の例では、arrという配列のメモリサイズをsizeof(arr)で取得し、要素のメモリサイズであるsizeof(arr[0])で割ることで、配列の要素数を求めています。

memcpy関数

memcpy関数は、指定したメモリ領域の内容を別のメモリ領域にコピーする関数です。

配列の要素を別の配列にコピーする際によく使用されます。

#include <stdio.h>
#include <string.h>
int main() {
    int arr1[] = {1, 2, 3, 4, 5};
    int arr2[5];
    memcpy(arr2, arr1, sizeof(arr1));
    printf("arr2の要素: ");
    for (int i = 0; i < sizeof(arr2) / sizeof(arr2[0]); i++) {
        printf("%d ", arr2[i]);
    }
    printf("\n");
    return 0;
}

上記の例では、arr1という配列の内容をarr2にコピーしています。

memcpy関数は、第1引数にコピー先のメモリ領域、第2引数にコピー元のメモリ領域、第3引数にコピーするバイト数を指定します。

memset関数

memset関数は、指定したメモリ領域に指定した値をセットする関数です。

配列の要素を初期化する際によく使用されます。

#include <stdio.h>
#include <string.h>
int main() {
    int arr[5];
    memset(arr, 0, sizeof(arr));
    printf("arrの要素: ");
    for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

上記の例では、arrという配列の要素を全て0で初期化しています。

memset関数は、第1引数に初期化するメモリ領域、第2引数にセットする値、第3引数にセットするバイト数を指定します。

memcmp関数

memcmp関数は、指定した2つのメモリ領域を比較する関数です。

配列の内容を比較する際によく使用されます。

#include <stdio.h>
#include <string.h>
int main() {
    int arr1[] = {1, 2, 3, 4, 5};
    int arr2[] = {1, 2, 3, 4, 5};
    int result = memcmp(arr1, arr2, sizeof(arr1));
    if (result == 0) {
        printf("arr1とarr2は同じです\n");
    } else {
        printf("arr1とarr2は異なります\n");
    }
    return 0;
}

上記の例では、arr1arr2の内容を比較しています。

memcmp関数は、第1引数に比較するメモリ領域1、第2引数に比較するメモリ領域2、第3引数に比較するバイト数を指定します。

比較結果は、0の場合はメモリ領域が等しいことを示し、0以外の場合はメモリ領域が異なることを示します。

以上が、C言語でよく使用される配列関数の説明です。

これらの関数を使うことで、配列の操作がより簡単になります。

メモリ管理関数

メモリ管理は、プログラムが実行中に必要なメモリを確保したり解放したりするための重要な機能です。

C言語では、メモリ管理を行うためのいくつかの関数が提供されています。

ここでは、よく使用されるメモリ管理関数について説明します。

malloc関数

malloc関数は、指定したバイト数のメモリ領域を動的に確保するために使用されます。

以下は、malloc関数の基本的な使い方です。

#include <stdlib.h>
int main() {
    int* ptr;
    // 10個のint型変数のためのメモリを確保
    ptr = (int*)malloc(10 * sizeof(int));
    if (ptr == NULL) {
        printf("メモリの確保に失敗しました。\n");
        return 1;
    }
    // メモリの使用
    // メモリの解放
    free(ptr);
    return 0;
}

上記の例では、malloc関数を使用してint型変数10個分のメモリを確保しています。

確保されたメモリは、ポインタptrに格納されます。

メモリの確保に成功した場合、malloc関数は確保されたメモリの先頭アドレスを返します。

確保に失敗した場合は、NULLが返されます。

free関数

free関数は、malloc関数calloc関数で確保したメモリを解放するために使用されます。

以下は、free関数の基本的な使い方です。

#include <stdlib.h>
int main() {
    int* ptr;
    // メモリの確保
    ptr = (int*)malloc(10 * sizeof(int));
    // メモリの使用
    // メモリの解放
    free(ptr);
    return 0;
}

上記の例では、malloc関数を使用してメモリを確保した後、不要になったメモリをfree関数で解放しています。

メモリを解放することで、他のプログラムがそのメモリを使用できるようになります。

realloc関数

realloc関数は、既に確保されたメモリのサイズを変更するために使用されます。

以下は、realloc関数の基本的な使い方です。

#include <stdlib.h>
int main() {
    int* ptr;
    // メモリの確保
    ptr = (int*)malloc(10 * sizeof(int));
    // メモリの再確保
    ptr = (int*)realloc(ptr, 20 * sizeof(int));
    if (ptr == NULL) {
        printf("メモリの再確保に失敗しました。\n");
        return 1;
    }
    // メモリの使用
    // メモリの解放
    free(ptr);
    return 0;
}

上記の例では、最初にmalloc関数を使用して10個のint型変数のメモリを確保し、その後realloc関数を使用して20個のint型変数のメモリに再確保しています。

再確保に成功した場合、realloc関数は新しいメモリの先頭アドレスを返します。

再確保に失敗した場合は、NULLが返されます。

calloc関数

calloc関数は、指定した要素数と要素のサイズに基づいて、メモリを動的に確保し、すべてのビットを0で初期化します。

以下は、calloc関数の基本的な使い方です。

#include <stdlib.h>
int main() {
    int* ptr;
    // 10個のint型変数のためのメモリを確保し、0で初期化
    ptr = (int*)calloc(10, sizeof(int));
    if (ptr == NULL) {
        printf("メモリの確保に失敗しました。\n");
        return 1;
    }
    // メモリの使用
    // メモリの解放
    free(ptr);
    return 0;
}

上記の例では、calloc関数を使用してint型変数10個分のメモリを確保し、すべてのビットを0で初期化しています。

calloc関数は、malloc関数と同様にメモリの確保に成功した場合は確保されたメモリの先頭アドレスを返し、失敗した場合はNULLを返します。

以上が、C言語でよく使用されるメモリ管理関数の説明です。

これらの関数を適切に使用することで、プログラムのメモリ管理を効率的に行うことができます。

malloc関数free関数などのメモリ管理関数は、プログラムの実行中にメモリリークやセグメンテーションフォルトなどの問題を引き起こす可能性があるため、注意が必要です。

メモリの確保と解放を正確に行うことが重要です。

また、確保したメモリを使用する際には、適切な型へのキャストやメモリの範囲外へのアクセスに注意する必要があります。

ファイル操作関数

ファイル操作は、C言語プログラミングにおいて非常に重要な要素です。

ファイル操作関数を使用することで、プログラムは外部のファイルとデータのやり取りを行うことができます。

ここでは、よく使用されるファイル操作関数について説明します。

fopen関数

fopen関数は、ファイルを開くために使用されます。

この関数は、指定されたファイル名とモードに基づいてファイルを開き、ファイルへのポインタを返します。

FILE *fopen(const char *filename, const char *mode);
  • filenameは、開きたいファイルの名前を指定します。
  • modeは、ファイルを開くためのモードを指定します。

一般的なモードには、r(読み取りモード)、w(書き込みモード)、a(追記モード)などがあります。

// ファイルを読み取りモードで開く例
FILE *file = fopen("data.txt", "r");
if (file == NULL) {
    printf("ファイルを開くことができませんでした。\n");
    return 1;
}

fclose関数

fclose関数は、ファイルを閉じるために使用されます。

ファイルを開いた後は、必ず閉じる必要があります。

int fclose(FILE *stream);

streamは、閉じるファイルへのポインタを指定します。

// ファイルを閉じる例
fclose(file);

fgets関数

fgets関数は、ファイルから1行分の文字列を読み取るために使用されます。

読み取った文字列は、指定されたバッファに格納されます。

char *fgets(char *str, int n, FILE *stream);
  • strは、読み取った文字列を格納するためのバッファを指定します。
  • nは、読み取る最大文字数を指定します。
  • streamは、読み取るファイルへのポインタを指定します。
// ファイルから1行分の文字列を読み取る例
char buffer[100];
fgets(buffer, sizeof(buffer), file);
printf("読み取った文字列: %s\n", buffer);

fprintf関数

fprintf関数は、フォーマット付きでファイルに書き込むために使用されます。

指定されたフォーマットに基づいて、データをファイルに書き込むことができます。

int fprintf(FILE *stream, const char *format, ...);
  • streamは、書き込むファイルへのポインタを指定します。
  • formatは、書き込むデータのフォーマットを指定します。
// ファイルにデータを書き込む例
int num = 10;
fprintf(file, "数値: %d\n", num);

以上が、よく使用されるファイル操作関数の一部です。

これらの関数を使用することで、ファイルの読み書きを行うことができます。

ファイル操作は、データの永続化や外部ファイルとの連携に欠かせない機能ですので、しっかりと理解しておきましょう。

fopen関数でファイルを開く際には、ファイルが存在するかどうかを確認することが重要です。

ファイルが存在しない場合には、エラーメッセージを表示するなどの処理を行うことが推奨されます。

時間関数

時間に関連する処理を行うための関数について説明します。

time関数

#include <time.h>
time_t time(time_t *timer);

time関数は、現在の時刻を取得するために使用されます。

この関数は、1970年1月1日午前0時からの経過秒数を返します。

引数としてポインタ型の変数を受け取ることもできますが、通常はNULLを指定します。

以下は、time関数を使用して現在の時刻を取得する例です。

#include <stdio.h>
#include <time.h>
int main() {
    time_t current_time;
    time(&current_time);
    printf("現在の時刻: %s", ctime(&current_time));
    return 0;
}
現在の時刻: Sat Jan  1 00:00:00 2022

localtime関数

#include <time.h>
struct tm *localtime(const time_t *timer);

localtime関数は、time関数で取得した時刻をローカル時間に変換するために使用されます。

この関数は、struct tm型のポインタを返します。

以下は、localtime関数を使用して現在のローカル時間を取得する例です。

#include <stdio.h>
#include <time.h>
int main() {
    time_t current_time;
    struct tm *local_time;
    time(&current_time);
    local_time = localtime(&current_time);
    printf("現在のローカル時間: %d/%d/%d %d:%d:%d\n",
           local_time->tm_year + 1900, local_time->tm_mon + 1, local_time->tm_mday,
           local_time->tm_hour, local_time->tm_min, local_time->tm_sec);
    return 0;
}
現在のローカル時間: 2022/01/01 00:00:00

strftime関数

#include <time.h>
size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr);

strftime関数は、指定されたフォーマットに従って時刻を文字列に変換するために使用されます。

変換された文字列は、引数として渡されたstrに格納されます。

maxsizeはstrのサイズを表し、formatはフォーマット指定子を含む文字列です。

timeptrはstruct tm型のポインタで、変換する時刻を指定します。

以下は、strftime関数を使用して現在の時刻を指定したフォーマットで表示する例です。

#include <stdio.h>
#include <time.h>
int main() {
    time_t current_time;
    struct tm *local_time;
    char time_string[80];
    time(&current_time);
    local_time = localtime(&current_time);
    strftime(time_string, sizeof(time_string), "%Y/%m/%d %H:%M:%S", local_time);
    printf("現在の時刻: %s\n", time_string);
    return 0;
}
現在の時刻: 2022/01/01 00:00:00

sleep関数

#include <unistd.h>
unsigned int sleep(unsigned int seconds);

sleep関数は、指定された秒数だけプログラムの実行を一時停止するために使用されます。

secondsには一時停止する秒数を指定します。

以下は、sleep関数を使用してプログラムを一時停止する例です。

#include <stdio.h>
#include <unistd.h>
int main() {
    printf("プログラムを一時停止します\n");
    sleep(5);
    printf("一時停止が終了しました\n");
    return 0;
}
プログラムを一時停止します
(5秒待つ)
一時停止が終了しました

sleep関数は、指定した秒数だけプログラムを一時停止するため、一時停止中は他の処理が実行されません。

マルチスレッド関数

マルチスレッドは、複数のスレッドを同時に実行することで、プログラムのパフォーマンスを向上させることができます。

C言語では、マルチスレッドを実現するための関数が提供されています。

以下では、よく使用されるマルチスレッド関数について説明します。

pthread_create関数

pthread_create関数は、新しいスレッドを作成するための関数です。

この関数を使用することで、プログラム内で複数のスレッドを作成することができます。

pthread_create関数の基本的な構文は以下の通りです。

#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                   void *(*start_routine) (void *), void *arg);
  • thread : 新しく作成されるスレッドの識別子を格納する変数へのポインタ
  • attr : スレッドの属性を指定するためのオプション引数(通常はNULLを指定)
  • start_routine : スレッドが実行する関数へのポインタ
  • arg : スレッドが実行する関数に渡す引数

pthread_join関数

pthread_join関数は、スレッドの終了を待つための関数です。

この関数を使用することで、スレッドの実行が終了するまでプログラムの実行を一時停止することができます。

pthread_join関数の基本的な構文は以下の通りです。

#include <pthread.h>
int pthread_join(pthread_t thread, void **retval);
  • thread : 終了を待つスレッドの識別子
  • retval : スレッドの終了時の戻り値を格納する変数へのポインタ

pthread_mutex_init関数

pthread_mutex_init関数は、ミューテックス(相互排除)を初期化するための関数です。

ミューテックスは、複数のスレッドが同時に共有リソースにアクセスすることを防ぐために使用されます。

pthread_mutex_init関数の基本的な構文は以下の通りです。

#include <pthread.h>
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
  • mutex : 初期化するミューテックスのポインタ
  • attr : ミューテックスの属性を指定するためのオプション引数(通常はNULLを指定)

pthread_cond_wait関数

pthread_cond_wait関数は、条件変数を待つための関数です。

条件変数は、スレッド間での通信や同期を行うために使用されます。

pthread_cond_wait関数の基本的な構文は以下の通りです。

#include <pthread.h>
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
  • cond : 待つ条件変数のポインタ
  • mutex : 条件変数を保護するためのミューテックスのポインタ

以上が、よく使用されるマルチスレッド関数の概要です。

これらの関数を適切に使用することで、効率的なマルチスレッドプログラミングを実現することができます。

マルチスレッドプログラミングは複雑な概念を含んでいるため、初心者にとっては理解が難しい場合があります。

十分な理解がない場合は、まずはシングルスレッドのプログラミング(マルチスレッドじゃない普通のプログラミング)に慣れてから取り組むことをおすすめします。

また、マルチスレッドプログラミングでは、スレッド間の競合状態やデッドロックなどの問題にも注意が必要です。

ネットワーク関数

ネットワークプログラミングでは、ソケットを作成し、通信を行うためにさまざまな関数を使用します。

以下では、よく使用されるネットワーク関数について説明します。

socket関数

#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol);

socket関数は、ソケットを作成するために使用されます。

引数として、ドメイン、タイプ、プロトコルを指定します。

  • domain: ソケットのドメインを指定します。

一般的には、AF_INET(IPv4)やAF_INET6(IPv6)が使用されます。

  • type: ソケットのタイプを指定します。

SOCK_STREAM(TCP)やSOCK_DGRAM(UDP)などがあります。

  • protocol: ソケットのプロトコルを指定します。

通常は0を指定します。

socket関数は、成功するとソケットのファイルディスクリプタを返します。

エラーが発生した場合は-1を返します。

bind関数

#include <sys/types.h>
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

bind関数は、ソケットにアドレスを割り当てるために使用されます。

引数として、ソケットのファイルディスクリプタ、アドレス構造体、アドレスの長さを指定します。

  • sockfd: ソケットのファイルディスクリプタを指定します。
  • addr: ソケットに割り当てるアドレス構造体を指定します。

一般的には、struct sockaddr_in(IPv4)やstruct sockaddr_in6(IPv6)が使用されます。

  • addrlen: アドレスの長さを指定します。

bind関数は、成功すると0を返します。

エラーが発生した場合は-1を返します。

listen関数

#include <sys/types.h>
#include <sys/socket.h>
int listen(int sockfd, int backlog);

listen関数は、ソケットを受け入れ可能な状態にし、接続待ち状態にするために使用されます。

引数として、ソケットのファイルディスクリプタ、接続待ちキューの最大長を指定します。

  • sockfd: ソケットのファイルディスクリプタを指定します。
  • backlog: 接続待ちキューの最大長を指定します。

listen関数は、成功すると0を返します。

エラーが発生した場合は-1を返します。

accept関数

#include <sys/types.h>
#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

accept関数は、接続要求を受け入れるために使用されます。

引数として、ソケットのファイルディスクリプタ、接続元のアドレス構造体、アドレスの長さを指定します。

  • sockfd: ソケットのファイルディスクリプタを指定します。
  • addr: 接続元のアドレス構造体を格納するためのポインタを指定します。
  • addrlen: アドレスの長さを格納するためのポインタを指定します。

accept関数は、成功すると新しいソケットのファイルディスクリプタを返します。

エラーが発生した場合は-1を返します。

ネットワーク関数を使用する際には、必要なヘッダファイルをインクルードすることを忘れないでください。

また、エラーハンドリングも適切に行うようにしましょう。

その他の関数

exit関数

exit関数は、プログラムを終了するために使用されます。

この関数を呼び出すと、プログラムは即座に終了し、メモリの解放やファイルのクローズなどの後処理は行われません。

exit関数は以下のように使用します。

#include <stdlib.h>
int main() {
    // プログラムの終了
    exit(0);
}

system関数

system関数は、コマンドを実行するために使用されます。

この関数を呼び出すと、指定したコマンドが実行されます。

system関数は以下のように使用します。

#include <stdlib.h>
int main() {
    // "ls"コマンドを実行
    system("ls");
    
    return 0;
}

signal関数

signal関数は、シグナルハンドラを設定するために使用されます。

シグナルは、プログラムに対して外部からのイベントやエラーを通知するために使用されます。

signal関数を使用することで、特定のシグナルが発生した際に実行される関数を指定することができます。

signal関数は以下のように使用します。

#include <signal.h>
// シグナルハンドラ関数
void signalHandler(int signal) {
    // シグナルが発生した際に実行される処理
}
int main() {
    // SIGINTシグナルに対してsignalHandler関数を設定
    signal(SIGINT, signalHandler);
    
    // プログラムの実行
    while (1) {
        // 何らかの処理
    }
    
    return 0;
}

setjmp関数

setjmp関数は、プログラムの実行中に発生したエラーなどの状態を保存し、後でその状態に戻るために使用されます。

setjmp関数を使用することで、プログラムの特定の箇所からジャンプし、longjmp関数を使用して保存した状態に戻ることができます。

setjmp関数は以下のように使用します。

#include <setjmp.h>
// ジャンプバッファ
jmp_buf jumpBuffer;
int main() {
    // ジャンプバッファの設定
    if (setjmp(jumpBuffer) == 0) {
        // エラーが発生した場合、ジャンプする
        longjmp(jumpBuffer, 1);
    }
    
    // プログラムの実行
    // ...
    
    return 0;
}

以上が「その他の関数」に関する説明です。

これらの関数を適切に活用することで、C言語プログラミングの幅が広がります。

目次から探す