C退出是否像返回一样?

时间:2019-05-21 14:07:33

标签: c return main exit

在c代码中,返回主行的行为是否相同?

int main (int argc , char* argv[])
{
    exit(2);
}

int main (int argc , char* argv[])
{
    return 2;
}

当两个代码都从另一个c调用时,它们都将返回2?

2 个答案:

答案 0 :(得分:2)

如果使用main()函数,最后调用exit()或使用return语句在主机环境中具有相同的输出,则它们都将执行控制权返回给环境。

但是,如果有任何用户定义的功能:

  • 使用return语句只会将控件返回给调用者函数
  • 在执行以下操作后,
  • 调用exit()会将控件返回到主机环境
    • 调用由atexit函数注册的所有函数
    • 所有未写入缓冲数据的打开流都将被刷新,所有打开流将被清除 关闭,并删除所有由tmpfile函数创建的文件。

答案 1 :(得分:0)

main的行为应类似于在exit()exit(main(argc,argv)))内被调用, 因此来自main的return应该基本上等同于exit(retval),除非返回 从main起,对main的本地语言的引用将变为无效,而如果您调用exit,则它们仍然有效:

#include <stdlib.h>
#include <stdio.h>
int *addr;
void print_thru_ptr(void)
{
    printf("%d\n", *addr);
}
int main (int argc , char* argv[])
{
    int local=42;
    addr=&local;
    atexit(print_thru_ptr);
    if(1){
        exit(2); //will print 42
    }else{
        return 2; //would be undefined
    }
}