C 库 - atexit() 函数



C 的stdlibatexit() 函数会在程序正常终止时调用指定的函数“func”。我们可以在任何地方注册终止函数,但它将在程序终止时被调用。

当通过对 atexit() 函数的不同调用指定多个函数时,它们将按照栈的顺序执行。

此函数通常用于执行清理任务,例如在程序退出之前保存状态、释放资源或显示消息。

语法

以下是 atexit() 函数的 C 库语法:

int atatexit(void (*func)(void))

参数

此函数接受一个参数:

  • func - 它表示指向在程序正常终止时要调用的函数的指针。

返回值

此函数返回以下值:

  • - 如果函数注册成功。
  • 非零 - 如果函数注册失败。

示例 1

在此示例中,我们创建一个基本的 C 程序来演示 atexit() 函数的使用。

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

void tutorialspoint(void) {
   printf("tutorialspoint.com India\n");
}

int main() {
   if (atexit(tutorialspoint) != 0) {
      fprintf(stderr, "Failed to register the tutorialspoint function with atexit\n");
      return EXIT_FAILURE;
   }
   
   printf("This will be printed before the program exits.\n");
   return EXIT_SUCCESS;
}

输出

以下是输出:

This will be printed before the program exits.
tutorialspoint.com India

示例 2

让我们创建一个另一个 C 程序,其中 atexit() 函数被多次调用。因此,所有指定的函数都按栈的顺序执行。

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

// first function
void first() {
   printf("Exit 1st \n");
}
// second function
void second() {
   printf("Exit 2nd \n");
}
// third function
void third() {
   printf("Exit 3rd \n");
}
// main function
int main() {
   int value1, value2, value3;
   value1 = atexit(first);
   value2 = atexit(second);
   value3 = atexit(third);
   if ((value1 != 0) || (value2 != 0) || (value3 != 0)) {
      printf("registration Failed for atexit() function. \n");
	  exit(1);
   }
   // it will execute at the first
   printf("Registration successful \n");
   return 0;
}

输出

以下是输出:

Registration successful
Exit 3rd
Exit 2nd
Exit 1st

示例 3

在这里,我们创建了一个 C 程序,它执行两个数字的加法和减法,并使用 atexit() 以栈的方式显示这些函数的结果。

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

// first function
void add() {
   int a=10;
   int b=5;
   int res = a+b;
   printf("addition of two number is: %d\n", res);
}
// second function
void sub() {
   int a=10;
   int b=5;
   int res = a-b;
   printf("subtraction of two number is: %d\n", res);
}
// main function
int main() {
   int value1, value2;
   value1 = atexit(add);
   value2 = atexit(sub);
   if ((value1 != 0) || (value2 != 0)) {
      printf("registration Failed for atexit() function. \n");
      exit(1);
   }
   // it will execute at the first
   printf("calculation successful \n");
   return 0;
}

输出

以下是输出:

calculation successful
subtraction of two number is: 5
addition of two number is: 15
广告