Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C / C++のatexit()関数とは?使い方とサンプルコードを解説

atexit()関数とは

atexit()関数は、プログラムが正常に終了した後に指定した関数を呼び出すために使用されます。登録された関数は引数なしで呼び出され、exit()関数の実行後に処理されます。終了時に実行したい関数は、プログラム内の任意の場所で登録することが可能です。この関数は「stdlib.h」ヘッダーファイル内で宣言されています。

atexit()関数の構文

C言語におけるatexit()関数の構文は以下のとおりです。

int atexit(void (*function_name)(void))

パラメータ

function_name − プログラム終了時に呼び出される関数へのポインタです。引数を取らず、戻り値もvoid型の関数である必要があります。

atexit()関数の使用例

以下は、C言語におけるatexit()関数の使用例です。

サンプルコード

#include <stdio.h>
#include <stdlib.h>
void func1 (void) {
   printf("\nExit of function 1");
}
void func2 (void) {
   printf("\nExit of function 2");
}
int main () {
   atexit (func1);
   printf("\nStarting of main()");
   atexit (func2);
   printf("\nEnding of main()");
   return 0;
}

出力結果

Starting of main()
Ending of main()
Exit of function 2
Exit of function 1

プログラムの解説

上記のプログラムでは、main()関数の前にfunc1とfunc2という2つの関数が定義されています。atexit()関数を使用することで、これらの定義済み関数をプログラムの終了時に呼び出すよう登録しています。main()関数は、自身が終了する前に登録された関数を呼び出します。

関数の登録は以下のコードで行っています。

atexit (func1);
printf("\nStarting of main()");
atexit (func2);
printf("\nEnding of main()");

出力結果に注目すると、func2がfunc1より先に実行されていることがわかります。これは、atexit()関数がLIFO(Last In First Out:後入れ先出し)の順序で登録された関数を呼び出すためです。つまり、最後に登録された関数が最初に実行されます。この動作を理解しておくことで、終了時の処理順序を意図的に制御することができます。

なお、atexit()関数は正常終了時(main()関数からのreturnやexit()の呼び出し)にのみ動作し、abort()関数による異常終了の場合には登録された関数は呼び出されない点に注意が必要です。

  1. C/C++のmbsrtowcs()関数とは?構文・パラメータ・戻り値と実例を解説

    本記事では、C++ STLに含まれるstd::mbsrtowcs()関数の仕組み、構文、および具体的な使用例について詳しく解説します。 std::mbsrtowcs()とは? std::mbsrtowcs()は、C++ STLに組み込まれている関数で、<cwchar>ヘッダーファイル内で定義されています。関数名のmbsrtowcs()は「multibyte string to wide character string(マルチバイト文字列からワイド文字列への変換)」を意味し、再開可能な変換状態を維持しながら、NULL終端されたマルチバイト文字列をワイド文字列表現へと変換します。この

  2. C/C++のsystem()関数とは?使い方と実行例を徹底解説

    この記事では、C/C++におけるsystem()関数の基本的な使い方と動作について、具体例を交えながら詳しく解説します。 system()関数は、C/C++標準ライブラリに含まれる関数の一つです。オペレーティングシステムのコマンドプロセッサ(コマンドプロンプト)やターミナルで実行可能なコマンドをプログラムから渡して実行でき、コマンドの処理が完了すると制御をプログラムに戻します。 この関数を使用するには、ヘッダーファイル<stdlib.h>(C++の場合は<cstdlib>)をインクルードする必要があります。 構文 system()関数の構文は以下の通りです。 int