C++ 退出成功和退出失败。它是在任何地方运行一次编译还是在任何地方运行一次编写编译?

C++ 退出成功和退出失败。它是在任何地方运行一次编译还是在任何地方运行一次编写编译?,c++,c,return,std,exit-code,C++,C,Return,Std,Exit Code,可能重复: 很长一段时间以来,我一直在使用return 0;,从我开始使用快板开始。比我发现的C++书发现了ExtIX的成功,比我在STDLIB .h或CSTDLIB中定义了它,并且只有两条线: #define EXIT_SUCCESS 0 #define EXIT_FAILURE 1 谁能给我解释一下吗?我使用的是上一代devc++4.9.9.2的mingw版本。EXIT_SUCCESS和EXIT_FAILURE是stdlib.h中定义的标准C宏。C不指定这些宏的值 POSIX要求退出成功

可能重复:

很长一段时间以来,我一直在使用return 0;,从我开始使用快板开始。比我发现的C++书发现了ExtIX的成功,比我在STDLIB .h或CSTDLIB中定义了它,并且只有两条线:

#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1

谁能给我解释一下吗?我使用的是上一代devc++4.9.9.2的mingw版本。

EXIT_SUCCESS和EXIT_FAILURE是stdlib.h中定义的标准C宏。C不指定这些宏的值


POSIX要求退出成功为0。但是没有为EXIT_FAILURE值指定任何内容。

EXIT_SUCCESS和EXIT_FAILURE是stdlib.h中定义的标准C宏。C不指定这些宏的值


POSIX要求退出成功为0。但是没有为EXIT_FAILURE值指定任何内容。

C99语言标准定义了两个宏EXIT_SUCCESS和EXIT_FAILURE,以扩展为整数常量表达式,该表达式可用作 退出函数,分别将未成功或成功终止状态返回给 主机环境§7.20/3

在退出功能§7.20.4.3/5的描述中,它还表示:

最后,将控件返回到主机环境。如果status的值为零或 EXIT_SUCCESS,状态successful termination的实现定义形式为 返回。如果status的值为EXIT_FAILURE,则为实现定义的表单 返回未成功终止状态的。否则返回的状态为 实现定义

因此,如果以0或exit_SUCCESS退出,则始终意味着成功终止主机环境。EXIT_FAILURE是一个始终意味着终止不成功的值,但除此之外的任何非零值都不能保证可移植


请注意,从main返回相当于调用状态为返回值§5.1.2.2.3的exit函数。

C99语言标准定义了两个宏exit_SUCCESS和exit_FAILURE,以扩展为整数常量表达式,该表达式可用作 退出函数,分别将未成功或成功终止状态返回给 主机环境§7.20/3

在退出功能§7.20.4.3/5的描述中,它还表示:

最后,将控件返回到主机环境。如果status的值为零或 EXIT_SUCCESS,状态successful termination的实现定义形式为 返回。如果status的值为EXIT_FAILURE,则为实现定义的表单 返回未成功终止状态的。否则返回的状态为 实现定义

因此,如果以0或exit_SUCCESS退出,则始终意味着成功终止主机环境。EXIT_FAILURE是一个始终意味着终止不成功的值,但除此之外的任何非零值都不能保证可移植


请注意,从main返回等同于调用状态为返回值§5.1.2.2.3的退出函数。

有什么解释?通常,您应该从main返回0以表示成功,并返回任何其他失败值。您可以使用其中任何一个,但是除非使用exit\u failure,否则没有标准的方法以失败退出。参见@chris 0表示成功是必需的,但是除了EXIT_FAILURE和EXIT_success之外,没有其他关于值的要求。即使在普通系统中:在Unix下,256也将被视为成功,因为操作系统只保留低阶8位,而在其他系统中,天空的限制是:负值或奇数值是失败的,或者。。。当然,Unix和Windows只是将该值传递给调用程序。按照它的意愿来解释它。C++可以在这里表达意图,但是调用程序的程序不受C++标准的约束。我是在一个叫你的节目中说的。按照惯例,零是成功,我不能用太多的经验来谈论其他操作系统,但Windows通常对失败有任何其他价值。@chris不用担心。我有点迂腐。但事实仍然是C++标准只能指定C++,并且它包含与外部环境交互的所有东西都可以真正被作为标准中的意图,因为C++标准不能指定外部环境。例如,它不能阻止我编写一个脚本来测试$?=3确定程序已成功。但这显然不是Unix世界的惯例。要解释什么呢?通常,您应该从main返回0以表示成功,并返回任何其他失败值。您可以使用其中任何一个,但是除非使用exit\u failure,否则没有标准的方法以失败退出。请看@chris 0表示成功,但没有其他要求
正在生成退出失败和退出成功以外的值。即使在普通系统中:在Unix下,256也将被视为成功,因为操作系统只保留低阶8位,而在其他系统中,天空的限制是:负值或奇数值是失败的,或者。。。当然,Unix和Windows只是将该值传递给调用程序。按照它的意愿来解释它。C++可以在这里表达意图,但是调用程序的程序不受C++标准的约束。我是在一个叫你的节目中说的。按照惯例,零是成功,我不能用太多的经验来谈论其他操作系统,但Windows通常对失败有任何其他价值。@chris不用担心。我有点迂腐。但事实仍然是C++标准只能指定C++,并且它包含与外部环境交互的所有东西都可以真正被作为标准中的意图,因为C++标准不能指定外部环境。例如,它不能阻止我编写一个脚本来测试$?=3确定程序已成功。但这显然不是Unix世界的惯例。C没有指定EXIT_SUCCESS的值,但它确实指定从main返回0与返回EXIT_SUCCESS具有相同的效果。如果内存服务没有将EXIT_SUCCESS定义为零,也没有将从main返回零视为成功终止,则存在较旧的虚拟机平台,但这是一个不符合标准的错误。@Zack表示EXIT_SUCCESS值可以是42,即使值0表示成功终止。确实可以;我要说的是返回0;from main是成功终止程序的一种完全一致的方法。C没有指定EXIT_SUCCESS的值,但它指定从main返回0与返回EXIT_SUCCESS具有相同的效果。如果内存服务没有将EXIT_SUCCESS定义为零,也没有将从main返回零视为成功终止,则存在较旧的虚拟机平台,但这是一个不符合标准的错误。@Zack表示EXIT_SUCCESS值可以是42,即使值0表示成功终止。确实可以;我要说的是返回0;从主函数是一个完美的一致性方法来成功地终止程序。关于从主返回的注释在C中是正确的,但是在C++中是不正确的。exit不调用局部变量的析构函数。从主返回,就像从其他函数返回一样,当对象超出范围时调用析构函数。关于从C返回的注释在C中是正确的,但是在C++中则不是这样。exit不调用局部变量的析构函数。从main返回,就像从任何其他函数返回一样,当对象超出范围时,将调用析构函数。