当前位置: 首页 > 面试题库 >

为什么main在这里不返回0?

端木弘方
2023-03-14
问题内容

我刚读

ISO / IEC 9899:201x委员会草案-2011年4月12日

在其中我发现5.1.2.2.3程序终止

..reaching the } that terminates the main function returns a value of 0.

这表示如果您未在中指定任何return语句main(),并且如果程序成功运行,则main的右大括号}将返回0。

但是在下面的代码中,我没有指定任何return语句,但是它没有返回0

#include<stdio.h>
int sum(int a,int b)
{
return (a + b);
}

int main()
{
    int a=10;
    int b=5;
    int ans;    
    ans=sum(a,b);
    printf("sum is %d",ans);
}

编译

gcc test.c  
./a.out
sum is 15
echo $?
9          // here it should be 0 but it shows 9 why?

问题答案:

该规则是在C标准的1999版本中添加的。在C90中,返回的状态未定义。

您可以通过传递-std=c99给gcc 来启用它。

附带说明一下,有趣的是返回了9,因为它的返回值printf只是写了9个字符。



 类似资料:
  • 我有一个非常简单的索引。在我的wordpress myTheme文件夹中的php文件中,我只想使用“pre_get_posts”钩子显示带有“friends”类别的帖子。但是美元查询- 但是当我使用下面的代码只是删除$查询- 现在,我想知道为什么$查询-

  • 问题示例的图像 在这两个节点上都调用 .intersects 并返回 true。我使用getBoundsInParent()来表示两者。有人可以帮我解决这个问题吗?我觉得这与getBoundsInParent()没有返回圆圈的准确边界有关,而是idk。谢谢

  • 问题内容: 我正在尝试通过以下方式将日期范围划分为各个日期: 而且我不知道为什么不起作用,因为日期仍然相同,所以循环变得无限。 问题答案: plusDays不会改变原始的,您必须分配结果:

  • 问题内容: 我应该开发一个简单的SFTP。 一切都进行得很好,直到我(在本例中)没有编写全部为止。可以请我解释一下,为什么系统挂在我身上吗? 服务器端: 客户端: 问题答案: 您的循环一直运行到流结束,但是对等方永远不会关闭套接字。该协议似乎要求打开套接字以供其他命令使用,因此您必须调整它的这一部分以包括一个长度字前缀,以便您知道要复制多少字节。 问题不是关于不写所有字节,而是关于阻塞in 。

  • 问题内容: 我正在通过以下方式从Java代码启动Windows进程(用C ++编写,但没有源代码): 我的问题是,waitFor()方法永远不会结束。因此,我尝试在一个简单的shell中启动该过程,并以shell中的许多打印正确结束(我猜是标准输出)。 因此,即使我现在不需要这些输出,我还是决定创建并启动一个读取标准输出的线程。这解决了问题。 因此,我的问题是以下问题:该解决方案是“启动并等待具有

  • 我在客户端使用vue、vue路由器,在服务器端使用express、morgan(MEVN应用程序) 在客户端我用vue cookie设置cookie 在服务器端,我使用CookieParser 所以,在应用程序。我有这样的代码 并且,在文件中,我有这样一个GET请求的代码 问题是,var loginHash=req.cookies['Login'];总是返回未定义的,即使我有登录cookie 添加