在C中,函数exit()还是应该允许main()处理?

时间:2015-02-15 23:14:08

标签: c error-handling terminate

我正在写一个C程序,我对某些事感到好奇。该程序有几个函数,成功时返回1,失败时返回0,大多数函数由main()调用(尽管有些函数由其他函数调用)。这是一个赋值,如果发现错误,我需要使用stderr将错误打印到fprintf()并终止程序。

处理错误终止的正确方法是什么?我应该允许函数打印到stderr,然后将1返回main()然后让main()实际终止,或者函数本身是否应该处理错误打印和程序终止?

2 个答案:

答案 0 :(得分:3)

C标准规定:

  

5.1.2.2.3如果main函数的返回类型是与int兼容的类型,则从初始调用返回到main函数是   等效以返回值调用退出函数   由主函数作为其论证。

因此当你遇到致命错误exit(errcode)时,它是完全有效的;

谦虚地知道: atexit()你可以指定一个由exit()调用的函数(没有参数)(例如清理混乱)。您甚至可以定义几个这样的函数:它们将按照其注册的相反顺序进行调用。

答案 1 :(得分:1)

这取决于您的需求。如果发生灾难性错误,并且您必须匆忙退出,则可以致电exit()。你可以把它想象成“恐慌”。

但良好的形式要求你永远不会exit(),而是从所有函数调用返回并让main()返回。事实上,如果可能的话,即使发生错误 ,良好的形式也是 exit()仅适用于您特别希望阻止执行任何其他代码的极少数情况。

例如,考虑一下如果您的教授希望将每个学生编写的函数包含在一个更大的程序中并逐个调用它们会发生什么。如果其中一个功能退出,其余学生的功能将永远不会运行。