首页 > 编程知识 正文

忽略scanf的返回值是什么意思,c语言主函数有几个

时间:2023-05-05 15:18:23 阅读:175763 作者:2454

一.根据

C标准规定,main函数可以省略返回语句,并等效于返回0。

5.areturnstatementinmainhastheeffectofleavingthemainfunction (destroyinganyobjectswithautomaticstorageduration ) andcalling

ifcontrolreachestheendofmainwithoutencounteringareturnstatement,the effect is that of executing

返回0;

3354 ISOC 033.6.1 mainfunctionp 44/72

3354 ISOC 983.6.1 mainfunctionp 43/69

注意:

1. main函数的返回类型是int,不是void或其他类型。

2 .此规则仅适用于主函数。

3 .对于其他函数,如果省略返回值,则会收到警告。

4.3的情况应该避免。

二.例

二、1 .合法最小化的完整C程序如下。

intmain () }

二.二.省略的确切含义

同时,标准术语得到了很好的研究。

“如果控件到达main结尾时没有遇到return语句,则效果与返回0相同。”

也就是说,标准规定“对于省略了return的分支,我认为返回0”。

标准情况下,其他分支也可以包含返回语句。

如下所示。

intmain(intargc,char*[] ) switch(argc ) ) ) ) ) ) ) ) )。

{case1://error,shouldpassingargumentreturn-1; //parseargumentsdefault : case 3://parser argv [2] case 2://parser argv [1];

//dosomework//controlreacheshere }

如果未输入命令行参数,将返回错误。

否则,当控件到达main末尾时,效果与return 0相同;

二、三.关于其他函数,没有这样的“优待”

例如:

intnot_main(intargc ) if ) argc=1) return-1;

}intmain(intargc,char*[] ) return not _ main (argc );

}

not_main肯定会收到警告。

没有输入命令行参数的程序的返回值无法预测。

三.验证

三、一、1. ERRORLEVEL

在windows上,您可以在%ERRORLEVEL%中查询上次程序的返回值。

结果与判断一致:

1. minimalist有确定的返回值0

2. omit_return_in_main具有固定的返回值-1或0

对于omit_return_in_other

3.1如果存在命令行参数,则将返回值确定为0。

3.2如果没有命令行参数,返回值将无法预测。

三.二汇编代码

更严密的验证方法是查看汇编代码。

可以看到minimalist和omit_return_in_main的main函数都有将eax设置为0的代码。

omit_return_in_other的not_main函数中没有这样的代码。

四.例外

VC6在这方面不符合标准。

四.对omit_return_in_main给予的警告:

warningc 4715: ' main ' : notallcontrolpathsreturnavalue

表示在这一点上与标准不一致。

很明显,如果有命令行参数,程序结果将无法预测。

四、2 .对于minimalist,它发出的警告很有趣:

warningc 4508: ' main ' : functionshouldreturnavalue; ' void' return type assumed

暴露不符合标准的其他地方——main回到void。

当然,在任何情况下,程序的结果都是无法预测的。

四、三、对于omit_return_in_other,是程序员的错误。

五.实践

不知道为什么c标准在这里做了“后门”。

——C在很多地方很严格。

在实际应用中,尽量不要采用这一特性。 因为:

1 .不支持旧编译器

2. C不支持——。 如果你希望main能同时用c语言编译

在演示用的C代码中,如果可以省略与主题无关的代码行,就可以使用这个特性。

例如,C标准的示例代码几乎都采用了这一特性。

由此可见,C标准在这里打开后门的理由是——使C标准更薄^_^

相关链接:

——示例代码

3358 immature.Google code.com/SVN/trunk/immature/sample/omit _ return _ in _ main

posted on 2009-04-2614336037 own waterloo阅读(3082 )注释)1)编辑集合引用

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。