这实际上在很长一段时间内让我烦恼。问题是这样的:如何在不明确使用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,但我无法从中得出任何确切的结论。
答案 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 ++运行时实现允许你想要的东西,但总的来说就像我上面描述的那样。