Open Group Base 仕様の exit() 説明の解釈

Open Group Base 仕様の exit() 説明の解釈

exit()Open Groupの基本仕様(さまざまな問題)の機能説明で、以下を読みました。

このexit()関数は、最初にatexit()に登録されているすべての関数を登録の逆順に呼び出す必要があります。登録時に呼び出された以前に登録された関数の後に関数が呼び出されない限り

確かに私のせいですが、太字を理解できません(そして文法構造も認識できません!)。他の人にこの文の意味を変えて説明してもらうように頼むことができますか?例があるかもしれません。

ベストアンサー1

仕様のこの部分は、他の終了ハンドラで登録された関数を扱います。考える

#include <stdio.h>
#include <stdlib.h>

void func1(void) {
  puts("func1");
}

void func2(void) {
  puts("func2");
}

void func4(void);

void func3(void) {
  atexit(func4);
  puts("func3");
}

void func4(void) {
  puts("func4");
}

int main(int argc, char **argv) {
  atexit(func1);
  atexit(func2);
  atexit(func3);
}

これらfunc1の関数は数値順に登録されていfunc2ます。登録時にすでに呼び出されているため、ハンドラの実行順序では考慮されなくなりました。func3mainfunc4func3mainfunc3func4

$ make exit
cc exit.c -o exit
$ ./exit
func3
func4
func2
func1

強調表示された部分がない場合は、厳密な解釈に従って以前にfunc4呼び出す必要があるかfunc3(不可能)func3後に呼び出す必要があるか(再度)、func4終了処理が開始されると、ハンドラを登録できなくなることが示唆されます(実行を保存するため)。注文する)。

おすすめ記事