首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >main()中的return语句与exit()

main()中的return语句与exit()
EN

Stack Overflow用户
提问于 2009-01-20 14:15:11
回答 3查看 80.8K关注 0票数 216

我应该在main()中使用exit()语句还是只使用return语句?就我个人而言,我更喜欢return语句,因为我觉得它就像读取任何其他函数一样,并且当我读取代码时,流程控制是平滑的(在我看来)。而且,即使我想重构main()函数,使用return似乎也比使用exit()更好。

exit()做了return做不到的特殊事情吗?

EN

回答 3

Stack Overflow用户

发布于 2011-05-02 20:07:33

选择exit至少有一个原因:如果您的任何atexit处理程序在main中引用自动存储持续时间数据,或者如果您在main中使用setvbufsetbuf将自动存储持续时间缓冲区分配给其中一个标准流,那么从main返回会产生未定义的行为,但调用exit是有效的。

另一个潜在的用途(通常是玩具程序)是从递归调用main的程序中退出。

票数 17
EN

Stack Overflow用户

发布于 2009-01-20 14:17:49

我总是使用return,因为main()的标准原型说明它返回一个int

也就是说,一些版本的标准对main进行了特殊处理,并假定如果没有显式的return语句,则返回0。给定以下代码:

代码语言:javascript
复制
int foo() {}
int main(int argc, char *argv[]) {}

G++仅为foo()生成警告,并忽略main中缺少的返回

代码语言:javascript
复制
% g++ -Wall -c foo.cc
foo.cc: In function ‘int foo()’:
foo.cc:1: warning: control reaches end of non-void function
票数 5
EN

Stack Overflow用户

发布于 2019-05-23 21:35:13

exit(0)return(0)main - when中是有区别的,你的main函数会被多次调用。

下面的程序

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
  if (argc == 0)
    return(0);
  printf("%d", main(argc - 1, argv));
}

运行方式

代码语言:javascript
复制
./program 0 0 0 0

将产生以下输出:

代码语言:javascript
复制
00000

但是这一条:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
  if (argc == 0)
    exit(0);
  printf("%d", main(argc - 1, argv));
}

无论参数如何,都不会打印任何内容。

如果你确信没有人会显式地调用你的main,这在技术上没有太大的区别,但是维护更清晰的代码exit看起来会更好。如果你出于某种原因想要调用main -你应该根据你的需要来调整它。

说起C。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/461449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档