失败时C ++会返回0还是NULL?

时间:2012-01-08 14:48:28

标签: c++ return

C ++程序失败时返回的价值是多少?我已经阅读了一些关于此的文章,但没有明确说明。

如果它没有返回0,有没有办法让程序在失败时返回0或NULL?关于std :: nothrow我有点红,但到目前为止还没有找到实际的例子。任何人都可以向我澄清这个吗?

6 个答案:

答案 0 :(得分:9)

该标准定义了具有明显含义的EXIT_SUCCESSEXIT_FAILURE错误代码。它们可以传递给exit()函数,或者使用return函数中的main语句显式返回。您可以将整个main函数包装为

int main() try {
...
} catch(...) {
 return EXIT_SUCCESS;
}

你的问题不清楚。

答案 1 :(得分:4)

就我而言,NULL只是一个0的宏。

在stdlib.h中:

/* Define NULL pointer value */

#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif 

我复制此内容的source(德语)也声明Stroustrup不推荐使用NULL。

答案 2 :(得分:1)

这个问题有点不清楚。您从main返回的值恰好是您传递给returnmain语句的值。关于那个,没有别的可以说了。

现在,你真的应该问什么问题?有两个方面:一个是C ++端,另一个是主机端(即操作系统)。

您无法控制任何给定的操作系统如何处理它启动的程序的错误情况。 C ++标准唯一保证的是:

  • 如果您的main返回0EXIT_SUCCESS或根本没有,那么该程序会以表示成功的方式结束;以及

  • 如果main返回EXIT_FAILURE,则程序以表示失败的方式结束。

程序的实际返回值完全取决于平台,即操作系统和运行时环境。

例如,在Linux上成功通过值0发出信号并通过非零值发生故障,因此只需将main()的值返回给操作系统即可执行C或C ++程序(和将EXIT_SUCCESS定义为0)。其他平台可能会选择不同的语义!

答案 3 :(得分:0)

通常假设程序成功时返回0,否则返回非零值。

您可以通过从main函数返回来设置返回值:

int main(int argc, char ** argv){
  return 0; // Finish with success
}

或将返回码传递给exit(int)函数。

另外值得注意的是,NULL被精确定义为(void*)0,并且在讨论指针时使用,而不是整数。如果您不明白它的含义,请阅读一本不错的C教程。

答案 4 :(得分:0)

NULL是宏,它与sa 0相同,它的定义如下:

#define NULL 0

当程序失败时,默认返回1,表示程序失败的操作系统。 如果返回值大于1,则由编写该程序的程序员完成。

如果程序执行sucessefuly它总是重新调整为0。 你不应该在程序失败时重新调整0以外的值,因为你不知道它是否失败。

如果返回值低于0,则表示失败。 所以只有成功值为0或NULL才是相同的。

答案 5 :(得分:-1)

成功运行通常会出现错误代码00以外的任何内容都会显示某种错误。

Error code                     Value              Description
ERROR_SUCCESS                    0            The action completed successfully.
ERROR_INVALID_DATA               13           The data is invalid.
ERROR_INVALID_PARAMETER          87           One of the parameters was invalid.

更多:http://msdn.microsoft.com/en-us/library/windows/desktop/aa368542(v=vs.85).aspx