我知道EXIT_SUCCESS
/ EXIT_FAILURE
通常用于main()退出,表示程序的成功。
但它是否也用于(通常或建议)正常的函数返回?我正在尝试编写一些“标准”代码,因此想知道我是否应该使用它们而不是0或-1 ..
答案 0 :(得分:13)
请勿对EXIT_SUCCESS
或EXIT_FAILURE
使用exit
或enum
以外的其他任何内容。
然后,请定义您自己的函数类型以便返回,但这取决于您所编写的情况和确切代码。
一些常见的方法是:
只要你保持一致,不要过分偏离惯例,记录一切,你应该没问题。
答案 1 :(得分:4)
您不应在EXIT_SUCCESS
的调用或EXIT_FAILURE
的返回值的上下文之外使用exit()
或main()
。这些整数的值不是由标准指定的,因此如果假设它们分别为0或1,则无法编写可移植代码。
该标准确实指明exit(0)
和来自return 0
的{{1}}的行为方式与main()
和exit(EXIT_SUCCESS)
相同,但这些值是“特殊的”因为它们将以实现定义的方式解释。也就是说,传递给系统的实际值可能不是0,并且如果实现需要,return EXIT_SUCCESS
的常量值可以不为0,只要EXIT_SUCCESS
来自main return 0
来自main的行为方式相同。
如果您在函数中使用这些值,您的调用者将不得不直接与return EXIT_SUCCESS
进行比较以确定函数是否成功,从个人来说,我觉得非常不方便。
EXIT_SUCCESS
问题变得更加明显int MyFunction1 () { /* ... */ return EXIT_SUCCESS; }
int MyFunction2 () { /* ... */ return 0; }
// Portable:
if (MyFunction1 () == EXIT_SUCCESS) { ... }
if (MyFunction2 () == 0) { ... }
if (!MyFunction2 ()) { ... }
// Not portable:
if (MyFunction1 () == 0) { ... }
if (!MyFunction1 ()) { ... }
if (MyFunction2 () == EXIT_SUCCESS) { ... }
:
EXIT_FAILURE
答案 2 :(得分:3)
POSIX标准定义的许多函数返回0表示成功,或者返回非零错误代码表示失败。
许多POSIX函数被定义为成功返回0,失败返回-1,设置errno全局变量以指示失败。但是多线程程序中的全局errno doesn't work well。
答案 3 :(得分:1)
如果您正在使用错误代码,那么使用相同的常量来获得图书馆使用的成功会使事情变得更加清晰。
答案 4 :(得分:0)
我说这没关系。
答案 5 :(得分:0)
我没有将EXIT_ *宏用于函数,因为:
现在,我们来到main():
答案 6 :(得分:0)
EXIT_SUCCESS是一个符号常量.-
您可以使用EXIT_SUCCESS
和EXIT_FAILURE
以及0表示确定,非0表示失败。
取决于品味,你也可以做到这一点
#define WRONG 1
#define COOL 0
并返回那些.-
使用您感觉更舒服的任何内容,但始终保持您的选择。
希望这有帮助!