在C程序中正确使用EXIT_FAILURE?

时间:2011-11-26 20:56:09

标签: c

C编程新手。我正在编写一个需要使用几个ansi C函数来处理数据的Web应用程序。另一种语言,可能是Java,将调用主C函数来触发该过程。我想从Java脚本的主C函数返回一个值来评估成功与否。我希望C出于这个原因使用exit()。

当我开始编程C时,有几次我遇到了可以评估以检查程序是否正常运行的情况。例如,如果我有一个只能等于“等式1”,“等式2”或“等式3”的变量,那么我使用if {} else if {} else if {}语句来检查三者中的哪一个可能性,我可以添加一个else {}到最后,我希望它的内容永远不会在正常运行的程序中执行,以捕获意外的问题。我想在最后的其他{}语句中放置一个exit(EXIT_FAILURE)。如果我理解正确,这将导致程序终止,并向Java调用程序返回一个非零值以供其检测。这是对的吗?

出于同样的原因,我可以在各种功能中使用此出口(EXIT_FAILURE),而不仅仅是main()吗?

关于设置它的机制的一些问题 - 主要功能是否设置为:int main(void);假设没有输入参数以简化?也就是说,int需要返回宏调用的整数值EXIT_FAILURE ...是吗?

如果main()函数调用了另一个函数,并且该函数包含exit(EXIT_FAILURE)语句,那么其他函数是否需要在其原型中特别包含一个返回值,例如: int function_one(void);其中int需要返回EXIT_FAILURE状态,或者EXIT_FAILURE宏在这方面是否自给自足,所以如果function_one想要返回一个字符,那么它的原型可以是{{1}并且不用担心在原型中为EXIT_FAILURE返回任何内容?

3 个答案:

答案 0 :(得分:8)

int的返回类型main实际上是调用进程看到的返回值。一般的想法是,您的main执行此操作与任何其他功能return EXIT_FAILURE一样。只要有可能,你应该使用这种直接方法。

函数exit可用于快捷所有这些并从main以外的任何其他函数返回调用者。但是使用exit的函数的返回值与它可能通过exit初步退出的事实无关。因此,您无需更改任何功能原型。

您的其他假设似乎是正确的,您使用exit来终止无效调用对我来说是有效的。

答案 1 :(得分:6)

是的,您可以在程序中的任何位置拨打exit(EXIT_FAILURE)

请注意exitatexit相关。另见_Exit(很少有用) 和abort

答案 2 :(得分:4)

是的,您可以从任何地方拨打exit以终止该计划。如果您认为您的程序不应该继续使用,请随意使用它。

此外,您可能希望设计自己的错误代码,而不是使用通用EXIT_FAILURE,这样您就可以向调用者提供更多信息,而不仅仅是“出错了”。并将其与exit一起使用(请记住,您可以使用任何8位值调用它,而不仅仅是EXIT_FAILUREEXIT_SUCCESS)。例如,0可能是成功,1可能是输入读取失败,2可能是输入格式错误,依此类推。