返回值0和-1之间的差异 谁能解释C++中返回0和-1之间的区别?我读过很多其他程序员的文章和帖子,他们说返回0表示程序成功,-1表示程序有错误。但我不明白的是,如果程序中存在错误,编译器将生成错误,为什么要使用这些语句?请详细解释这些语句的真正含义。

返回值0和-1之间的差异 谁能解释C++中返回0和-1之间的区别?我读过很多其他程序员的文章和帖子,他们说返回0表示程序成功,-1表示程序有错误。但我不明白的是,如果程序中存在错误,编译器将生成错误,为什么要使用这些语句?请详细解释这些语句的真正含义。,c++,C++,它基本上意味着除0之外的任何内容都意味着在程序执行过程中发生了错误。程序无法处理它,因此它以状态代码退出 通常,在使用shell时,您会注意到某些命令以非0状态代码退出。您可以通过运行echo$?命令来检查该值 最后,您可以使用返回代码与客户端通信发生了什么。也就是说,如果您描述了程序可以返回哪些返回代码。Areturn就是任何函数返回的值。在函数结束时,计算机能够接受一个值,当它返回到程序的其余部分时,将其带回去。对于您可能熟悉的函数int main(),返回值用作程序成功的指示 main()

它基本上意味着除
0
之外的任何内容都意味着在程序执行过程中发生了错误。程序无法处理它,因此它以状态代码退出

通常,在使用shell时,您会注意到某些命令以非0状态代码退出。您可以通过运行
echo$?
命令来检查该值


最后,您可以使用返回代码与客户端通信发生了什么。也就是说,如果您描述了程序可以返回哪些返回代码。

A
return
就是任何函数返回的值。在函数结束时,计算机能够接受一个值,当它返回到程序的其余部分时,将其带回去。对于您可能熟悉的函数
int main()
,返回值用作程序成功的指示

main()
只是您正在运行的程序的入口点。这是程序启动时计算机调用的第一个函数(有些例外) 理论上,您可以从
main()
返回任何整数


唯一“被接受”的东西是,任何非零的东西通常都是一些错误或错误。所以a
返回0
表示成功,而
返回-1可能指示某种错误。事实上,从
main()
返回的值并不重要,也不会影响程序的运行方式。

这与编译器完全无关

编译器将报告语法错误

返回代码用于报告程序是否成功完成。
(“成功”取决于计划的目的)

例如:

// Program SearchTerm "term to find"
int main(int argc, char* argv[])
{
   bool search_successful = false;

   [ ... do work ... ]

    if (search_successful)
    {
        return 0;  // The search worked.
    }
    else
    {
        return -1;  // The search failed
    }
}
用法示例:
当程序报告成功或失败时,可以将其集成到脚本中,例如:

#!/bin/bash
if `SearchTerm "Microsoft"`; then
    GetTopResults "Microsoft"
else
    echo "No results found, no Top Results to retrieve"
fi

如果您询问
main
返回的值,则可以返回两个定义的值:
EXIT\u SUCCESS
EXIT\u FAILURE
。这些值在标题
和标题
中定义。您还可以返回值0,这相当于返回
EXIT\u SUCCESS
。C或C++中没有其他有意义的值,尽管你的实现可以为其他值提供意义。

< P>我假设你在程序退出时从主程序返回0或1。这样做的目的是通知调用程序程序程序的成功或失败。如果您只是在命令提示符下运行程序,这不是很方便,但是如果您的程序是在脚本(Perl、PHP、python、PowerShell等)中调用的,您可以测试程序是否成功


简而言之,如果您的程序被另一个程序调用,则调用程序可以测试成功或失败,并做出适当的响应

int main()
的返回值是程序的所谓退出代码。在C语言中已经是这样了(它没有例外),基本上是告诉调用方它是如何运行的。退出代码为零意味着成功,而每隔一个退出代码(但通常只使用正数)意味着出了问题。有时,程序会记录某个退出代码的含义,即如果找不到文件或分配失败等

这是脚本编写的一个非常重要的部分,例如bash脚本,它通过这种方式知道调用的命令是正确的还是错误的。即使程序因异常而崩溃,程序也会生成退出代码(非零)。在bash中,您可以使用
echo$?
查看上次运行的程序的退出代码,因此您可以自己检查

程序成功,-1表示程序有错误

请详细解释这些陈述的真正含义

在某些情况下,函数无法继续,也无法完成为其指定的任务。这种情况通常称为错误。有许多可能的错误来源。其中一个例子是一个函数,它具有函数调用方不满足的输入的前置条件。这种先决条件的一个例子是计算有理数的平方根函数(即不复杂):负输入没有结果

当遇到错误时,必须以某种方式将其传达给调用者。有许多技术,但我们不在这里详细介绍所有这些技术。我将提到C++中的一个选项是异常。异常技术有一些有用的特性,但它并不普遍适用于所有情况

另一个非常简单的技术是返回一个整数值错误代码。如果选择0表示无错误,则函数调用方可以使用以下模式检查错误:

int error = function(arguments)
if (error) {
    // handle error here
}
这种模式在C API中非常常见。C++继承了C标准库,利用C库是很普遍的,所以在C++中也经常遇到这种情况。 有时,函数需要将返回值用于其他目的。例如,来自POSIX标准的
open
调用返回一个称为“文件描述符”的整数,它是一个正整数。由于返回类型域中的某些值未使用(负数),因此也可以使用它来表示错误条件。虽然可以使用任何负数,但选择了-1,这也是非常常规的。在其他一些API中,不同的负数
int error = function(arguments)
if (error) {
    // handle error here
}