代码之家  ›  专栏  ›  技术社区  ›  whacko__Cracko

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

  •  1
  • whacko__Cracko  · 技术社区  · 14 年前

    这其实让我很烦好了,现在问题是这样的: 如何在gcc/g++中不显式使用return/exit而将程序的退出状态设置为任何值? 让我们考虑一下这段代码:(从stdin获取输入并打印 直到遇到零输入0为止)

    #include <stdio.h>
    
    int main() {
      int n;
      while(scanf("%d",&n) && n>0 )
        printf("%d\n",n);
    }
    

    在我的系统中(这是 )它正在返回1,怎么做 退出/返回?

    我稍微修改了一下代码:

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

    它现在隐式地返回0,但我不能从中得出任何明确的结论。

    3 回复  |  直到 14 年前
        1
  •  2
  •   AProgrammer    14 年前

    在C++和C99中,离开主执行而不执行Ext()或返回应该相当于返回0(参见C++的1.1.2.2.3,C++的3.61/5),如果我正确记得,C89离开了未定义的。

        2
  •  2
  •   aib    14 年前

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

    我能想到的最好办法是:

    static int program_exit_value;
    
    void setExitValue(int value)
    {
        program_exit_value = value;
    }
    
    int main(void)
    {
        ...
    
        return program_exit_value;
    }
    

    它使用一个 return 但它的优点是符合ANSI标准。

        3
  •  0
  •   sharptooth    14 年前

    关键是您的程序最终将终止—例如,运行时将调用 ExitProcess()

    也许有一些C++运行时实现允许您想要的,但是总体上,行为是如上所述。