【发布时间】:2016-05-26 02:30:31
【问题描述】:
我已经尝试了atexit() 的基本实现。虽然main() 的返回类型是int,但编译器在不从main 返回任何值的情况下执行时不会出错。
#include <stdio.h>
#include <stdlib.h>
void my_exit1(void);
void my_exit2(void);
int main(void)
{
if (atexit(my_exit2) != 0)
printf("can't register my_exit2");
if (atexit(my_exit1) != 0)
printf("can't register my_exit1");
printf("starting main\n");
printf("main is done\n");
//return(0);
//exit(0);
}
void my_exit1(void)
{
printf("first exit handler\n");
}
void my_exit2(void)
{
printf("second exit handler\n");
}
输出:
starting main
main is done
first exit handler
second exit handler
【问题讨论】:
-
@TomKarzes 阅读:stackoverflow.com/a/22262/4082723
-
@2501 您将 C++ 与 C 混淆了。它们在这方面完全不同。相信我,在 C 中,返回值是未定义的。其实我用gcc试了一下,递归调用的时候碰巧得到了
main的返回值1。 -
@2501 C++ 标准指定当 main 脱落 时的隐式返回值为 0,但根据 C 标准,该行为是未定义的。然而,许多实现确实返回 0,例如某些实现仍然提供隐式返回类型
int。但同样:这是非标准行为。