3

假设我们有程序:

int main(int argc, char** argv){
  if(argc < 3){
    printf("usage details\n");
    return EXIT_FAILURE;
  }
  dostuff();
  return EXIT_SUCCESS;
}

我也看过这个:

int main(int argc, char** argv){
  if(argc < 3){
    printf("usage details\n");
    exit(EXIT_FAILURE);
  }
  dostuff();
  exit(EXIT_SUCCESS);
}

根据ISO/IEC 9899:1989 (C90):

该标准定义了 3 个严格符合的返回值(即不依赖于实现定义的行为):0 和 EXIT_SUCCESS 表示成功终止,EXIT_FAILURE 表示不成功终止。任何其他值都是非标准的和实现定义的。main 最后必须有一个明确的 return 语句以避免未定义的行为。

此外,根据ISO/IEC 9899:2011

5.1.2.2.3 程序终止

如果 main 函数的返回类型是与 int 兼容的类型,则从初始调用到 main 函数的 return 等价于以 main 函数返回的值作为参数调用 exit 函数;到达终止 main 函数的 } 返回值 0。如果返回类型与 int 不兼容,则返回给宿主环境的终止状态未指定。

它指出从 main 的返回等效于以相同的返回值调用 exit。

话虽如此,问题是:重要的是,您是从 main 返回并让它为您调用 exit,还是从 main 退出

4

1 回答 1

3

作为终止程序的方法,return与此exit密切相关。事实上,声明

return EXIT_SUCCESS;

inmain相当于

exit (EXIT_SUCCESS);  

return和之间的区别在于,无论哪个函数调用它exitexit都会导致程序终止。该return语句仅在出现在main函数中时才会导致程序终止。

于 2013-11-11T18:35:22.503 回答