没有显式使用return / exit的任何退出状态

时间:2010-02-24 08:05:07

标签: c++ c gcc exit

这实际上在很长一段时间内让我烦恼。问题是这样的:如何在不明确使用gcc / g ++中的return / exit的情况下将程序的退出状态设置为任何值? 让我们考虑一下这段代码:(从stdin和print中获取输入 它到stdout直到遇到零输入0)

#include <stdio.h>

int main() {
  int n;
  while(scanf("%d",&n) && n>0 )
    printf("%d\n",n);
}

在我的系统( windows + mingw )中,它返回1,如何制作 它在不明确使用的情况下隐式返回0或其他任何东西 退出/退货?

编辑:

我稍微修改了一下代码:

int f(int n) { 
  return (n>0);
}

int main(){
  int n;
  while(scanf("%d",&n)&&f(n))
    printf("%d\n",n);
}

它现在隐含地返回0,但我无法从中得出任何确切的结论。

3 个答案:

答案 0 :(得分:2)

在C ++和C99中,保留main而不执行exit()或return应该等效于返回0(对于C ++,请参阅5.1.2.2.3,对于C ++,请参见3.6.1 / 5),如果我记得C89则留下未定义正确。

答案 1 :(得分:2)

我认为你的实现是使用main()内部调用的最后一个函数的返回值 - 当然不是你可以依赖的行为。 (并且可能随着编译选项而改变,即内联)

(这可能是由于EAX寄存器中留下的值,如评论中所述。)

我能想出的最好的结果:

static int program_exit_value;

void setExitValue(int value)
{
    program_exit_value = value;
}

int main(void)
{
    ...

    return program_exit_value;
}

使用return语句,但其优点是符合ANSI标准。

答案 2 :(得分:0)

关键是你的程序最终将终止 - 例如,运行时将在Windows上调用ExitProcess()或在另一个操作系统上调用等效函数。用于结束程序的原语将设置错误代码(退出状态),该代码将覆盖您之前直接设置的代码。

也许有一些C ++运行时实现允许你想要的东西,但总的来说就像我上面描述的那样。