在 C 语言中,函数可以 exit() 还是应该允许 main() 来处理?

In C, can a function exit() or should it allow main() to handle that?

我正在写一个 C 程序,我对一些东西很好奇。该程序有几个函数,return 1 表示成功,0 表示失败,大多数函数由 main() 调用(尽管有些函数由其他函数调用)。这是一个作业,如果发现错误,我需要使用 fprintf() 将错误打印到 stderr 并终止程序。

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

这取决于您的需求。如果发生灾难性错误,必须赶紧退出,可以调用exit()。您可以将其视为 "panic quit".

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

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

C 标准规定:

5.1.2.2.3 If the return type of the main function is a type compatible with int, a return from the initial call to the main function is equivalent to calling the exit function with the value returned by the main function as its argument.

所以它是完全有效的,当你遇到致命错误时做一个exit(errcode)

有用的知识:atexit() 你可以指定一个函数(不带参数),它将被调用exit()(例如收拾残局)。您甚至可以定义几个这样的函数:它们将以与注册相反的顺序被调用。