`
clark1231
  • 浏览: 248099 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

戒除main函数返回值为void的坏习惯

c++ 
阅读更多

有同学在升级MinGW以后说以前写的程序编译不通过或者编译过程中报告警告,经过检查他的代码是下面的样子:

void main(){}这段代码看起来没有错误。而且在MinGW2.9.5下编译也没问题,但是如果升级到3.4.5以后,如果是“.c”后缀的源代码(也就是C语言)则会报 警告(warning),如果是“.cpp”后缀的源代码(也就是C++语言)则会报编译错误。有同学认为这是MinGW3.4.5的BUG,其实这是咱 们写的代码不规范造成的。很多人甚至市面上的一些书籍,都使用了void main( ),其实这是错误的。C/C++ 中从来没有定义过void main( )。

 

1. C语言中在 C89(C语言的早期标准)中,main() 是可以接受void返回值的。Brian W. Kernighan 和 Dennis M. Ritchie 的经典巨著 The C programming Language(《C 程序设计语言》)用的就是void main( )。不过在最新的 C99 标准中,只有以下两种定义方式是正确的: int main( void ) int main( int argc, char *argv[] ) 当然,我们也可以做一点小小的改动。例如:char *argv[] 可以写成 char **argv;argv 和 argc 可以改成别的变量名(如 intval 和 charval),不过一定要符合变量的命名规则。 如果你不需要从命令行中获取参数,请用 int main( void ) ;否则请用 int main( int argc, char *argv[] ) 。 main 函数的返回值类型必须是 int ,这样返回值才能传递给操作系统。 如果 main 函数的最后没有写 return 语句的话,C99 规定编译器要自动在生成的目标文件中(如 exe 文件)加入 return 0 ,表示程序正常退出。不过,我还是建议你最好在 main 函数的最后加上 return 语句,虽然没有这个必要,但这是一个好的习惯。注意,vc6 不会在生成的目标文件中加入 return 0 ,大概是因为 vc6 是 98 年的产品,所以才不支持这个特性。现在明白我为什么建议你最好加上 return 语句了吧!不过,gcc3.2(Linux 下的 C 编译器)会在生成的目标文件中加入 return 0 。

 

2. C++ 语言C++98(C++语言的一个标准)中定义了如下两种 main 函数的定义方式: int main( ) int main( int argc, char *argv[] ) int main( ) 等同于 C99 中的 int main( void ) ;int main( int argc, char *argv[] ) 的用法也和 C99 中定义的一样。同样,main 函数的返回值类型也必须是 int 。如果 main 函数的末尾没写 return 语句,C++98 规定编译器要自动在生成的目标文件中加入 return 0 。同样,vc6 也不支持这个特性,但是 g++3.2(Linux 下的 C++ 编译器)支持。

 

3. 关于 void main 在 C 和 C++ 中,不接收任何参数也不返回任何信息的函数原型为“void foo(void);”。可能正是因为这个,所以很多人都误认为如果不需要程序返回任何信息时可以把 main 函数定义成 void main(void) 。然而这是错误的!main 函数的返回值应该定义为 int 类型,C 和 C++ 标准中都是这样规定的。虽然在一些编译器中,void main 可以通过编译(如 vc6),但并非所有编译器都支持 void main ,因为标准中从来没有定义过 void main 。g++3.2 中如果 main 函数的返回值不是 int 类型,就根本通不过编译。而 gcc3.2 则会发出警告。所以,如果你想你的程序拥有很好的可移植性,请一定要用 int main 。4. 返回值的作用main 函数的返回值用于说明程序的退出状态。如果返回 0,则代表程序正常退出,否则代表程序异常退出。

分享到:
评论

相关推荐

    帮助学生戒除网瘾小组工作总结.doc

    帮助学生戒除网瘾小组工作总结.doc

    《戒除网瘾》主题班会[文].pdf

    《戒除网瘾》主题班会[文].pdf

    理工科院校学生网瘾现状调查、成因分析及戒除对策研究

    理工科院校学生网瘾现状调查、成因分析及戒除对策研究,王书诏,赵睿,实现社会和谐,建设美好社会,始终是人类孜孜以求的社会理想,而加强青年学生的思想道德建设更是构建社会主义和谐社会的一项重要

    电击手表放电手环起床神器Pavlock的软件源代码

    电击手环就是可以产生静电脉冲的智能手环,它主要的功能就是早起闹钟,以及电击防疲劳,另外有一些人用电击手表来戒除坏习惯(心理学领域的电击厌恶疗法),它可以产生将近500伏的静电脉冲,目前市面上电击手表主要...

    电击手表放电手环的手机端App源代码

    电击手环就是可以产生静电脉冲的智能手环,它主要的功能就是早起闹钟,以及电击防疲劳,另外有一些人用电击手表来戒除坏习惯(心理学领域的电击厌恶疗法),它可以产生将近500伏的静电脉冲,目前市面上电击手表主要...

    一名工科男大学生网络成瘾的戒除与思考 (2010年)

    描述了一名工科男大学生网络成瘾的戒除过程,通过了解其生活史与人际关系网,采用同辈介入、家长谈话、辅导员谈话等三种措施改变成瘾者的认知模式,使该生戒除了网络成瘾的行为,基本消除了“网络人格”。...

    你可以退出:一种工具,可以支持你在戒除不良习惯方面的进步

    这个程序是跟踪您的进度并鼓励您戒掉不良习惯的工具。 在简单的日历视图中,您可以设置过去成功或失败的日子。 根据这些数据,您可以看到有关成功天数的令人鼓舞的统计信息。此外,您可以获得特殊成就,可以实现...

    绿色上网-健康上网软件

    绿色童年是一款能够控制孩子上网时间,有效过滤不良信息的反黄软件,能够帮助学生安全快速的戒除网瘾,为未成年人提供绿色安全的上网环境,解除家长后顾之忧。

    35岁前你应该知道做到的

    35岁以前成功必备9大好习惯 35岁以前成功必须戒除的9大恶习 你知道吗?快看一看吧,相信对你有用的!

    基于潜意识理论的青少年网瘾发生机理及预防

    基于潜意识理论的青少年网瘾发生机理及预防,李春明,,综述了网瘾的预防和戒除方法。基于潜意识理论,提出了青少年网络成瘾的机理、预防措施和戒除方法的原则。网瘾的成因是心理上的缺

    Tutor网瘾防治软件 v1.0

    家长苦口婆心往往无济于事,本软件可以帮助家长轻松设置上网时段及各种限制,对逐步戒除网瘾和防止网瘾都有很好的效果。本软件保护力强,只有家长凭密码才能暂停监护和卸载本软件。没有密码的被监护者(有网瘾的青...

    (优质)程序员转正答辩ppt

    同时我发现我身边有一群同样怀揣梦想、追求更高更完善的自己的小伙伴,我真切的希望能和他们一起学习,一起工作,一起实现自我价值,为公司创造更大的价值。所以我就这五个月的工作情况向各位领导作个简要汇报,最后...

    游戏拦截专家2011

    游戏防沉迷专家同时也是一款专业的网瘾戒除软件,按照人体生物规律,采用多种独特技术从源头和习惯上彻底杜绝游戏,配合游戏拦截专家可以有效的控制、降低、直至戒除网瘾。 游戏防沉迷专家操作简单,您最少只要单击...

    mindful-internet-use:Chrome浏览器扩展程序可防止盲目浏览

    通过反复鼓励对互联网的更故意和更仔细的使用,此扩展将帮助用户戒除不良的互联网使用。 此扩展程序的目标是为其用户提供一种工具,以帮助他们避免盲目浏览和无意间使用互联网。 这可以通过鼓励用户呼吸并在允许...

    史上最全的英语前缀大全

    泛滥的(a+wash冲洗)2、ab-,abs-加在词根前,表示"相反,变坏,离去"等abnormal 反常的(ab+normal正常的)abuse 滥用(ab+use用→用坏→滥用)absorb 吸收(ab+sorb吸收→吸收掉)absent 缺席的(ab+sent出现→...

    英语词根词缀记忆大全

    英语词根词缀记忆大全 电子书版 第一部分 通过词缀认识单词 (常用前缀一) 1、a- ① 加在单词或词根前面,表示"不,无,非" acentric 无中心的(a+centric中心的...禁欲(abs+tin拿住+ense→不在拿住→戒除,禁欲)

    论文研究 - 美沙酮治疗摩洛哥丹吉尔市海洛因依赖者的健康状况和生活质量的演变

    一些研究认为,在治疗过程中改善患者的生活质量,包括社交和关系生活以及身体状态,比戒除该物质本身更为重要。 这项研究的目的是评估美沙酮治疗对丹吉尔市卫生院101名吸毒成瘾者生活质量的影响,包括使用以下特征...

    Mindful Internet Use-crx插件

    通过反复鼓励对互联网的更故意和更仔细的使用,此扩展将帮助用户戒除不良的互联网使用。 此扩展程序的目标是为其用户提供一种工具,以帮助他们避免盲目浏览和无意间使用互联网。 这可以通过鼓励用户呼吸并在允许用户...

Global site tag (gtag.js) - Google Analytics