程序运行即使我返回-1?

时间:2017-06-29 21:58:17

标签: c++

我正在运行这个非常简单的c ++代码:

    int main()
{
    return -1;
}

但是当我用g ++编译并运行它(在ubuntu 14.04上)时,它会通过并且我没有错误。我正在阅读的书," C ++ Primer"说我应该收到一个错误,所以我想知道是否有人可以告诉我我做错了什么。

3 个答案:

答案 0 :(得分:2)

您的程序正常运行,然后将-1状态返回给环境。如果您不查看该状态,则不会看到任何错误迹象。

如果您从bash shell运行,则可以执行以下操作:

if ./my_program ; then
    echo Success
else
    echo Failure
fi

或,在一行:

if ./my_program ; then echo Success ; else echo Failure ; fi

或者,如果你想要模糊:

./my_program && echo Success || echo Failure

更简单:

./my_program
echo $?

顺便说一句,返回状态-1不是表示失败的便携方式。我建议您在程序的顶部添加#include <cstdlib>并使用return EXIT_FAILURE;。 (EXIT_FAILURE的值通常为1,但它是表示您正在使用的系统失败所需的任何内容。)

答案 1 :(得分:1)

你在这里写的代码是完全合法的C ++。该程序运行,然后发出退出代码-1的信号。在某些操作系统上,如果程序以非零退出代码终止,操作系统将向用户报告错误,指示发生了奇怪的事情。但是,在Ubuntu上,以非零退出代码终止的程序不会触发显式错误消息,因此您所看到的是预期的行为。

答案 2 :(得分:1)

main的返回值是退出代码。如果从shell(例如Unix系统上的bash或Windows上的CMD)运行程序,则可以检查退出代码。按照惯例,非零退出代码通常意味着发生了错误。例如,如果编译错误,则g++编译器输出非零退出代码;如果一切正常,则输出0

由于您说过您使用Ubuntu,我认为您正在使用bashdash来运行此程序。尝试运行该程序,然后在运行程序后执行echo $?。您应该看到程序返回的退出代码。