`
clark1231
  • 浏览: 258982 次
  • 性别: 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

    鉴于此,开展帮助学生戒除网瘾的小组工作显得尤为必要。本文将结合工作经验,对“帮助学生戒除网瘾小组”的工作进行总结。 一、小组工作概述 本小组为成长性小组,目标是帮助沉迷网络的初中生戒除网瘾,提升他们的...

    习惯的力量主题班会.ppt

    【习惯的力量】是一个重要的主题,尤其对于学习和成长...无论是学习还是日常生活,我们都应积极培养有益的习惯,同时警惕和努力戒除不良的习惯。通过持之以恒的实践,我们可以利用习惯的力量塑造更好的自己,迈向成功。

    养成好习惯作文.doc

    因此,我们应该努力培养好习惯,戒除坏习惯,这样我们的人生才能更稳步地前行。 最后,改变不良习惯并非一蹴而就,它需要持之以恒的努力和决心。正如一个因过度看电视导致作息混乱和学习问题的孩子,通过家长的引导...

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

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

    如何培养幼儿的良好习惯.doc

    通过埃德温·格斯里的戒除不良习惯方法,如设定明确目标、榜样示范和训练法,可以帮助幼儿改正如过度吃零食等坏习惯。 **学习要求** 学习者需理解习惯的定义和特征,掌握幼儿习惯的内涵和形成特点,理解如何通过...

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

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

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

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

    高三英语周考试题文.pdf

    儿童时期是一个人性格形成的关键时期,好的习惯可以为其一生的成功奠定基础,而坏习惯的形成则可能对其发展产生长期的负面影响。例如,守时、勤奋、整洁等习惯可以培养孩子的责任感和自我管理能力,而懒惰、依赖、...

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

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

    2015年高中英语VOA习惯用语第444讲lickthehabit素材

    这个短语源自美国南部的俚语,直译为“舔去习惯”,但实际含义是克服并戒除一个根深蒂固的坏习惯。特别是当这个习惯对健康有害时,比如吸烟或酗酒等,该短语就显得尤为贴切。例句中提到了一个男主角在医生的警告下,...

    赖世雄中级美国英语教程下 pdf

    教材中的课程设计也体现了对日常生活中常见情景的模拟,如“Traveling by Plane”(乘飞机旅行)和“Kick the Habit”(戒除坏习惯)。这说明《中级美国英语教程》重视英语在实际生活中的应用,引导学生将学到的语言...

    黑龙江高考语文作文.docx

    - 张叔叔的故事警示我们,改变坏习惯并非易事,需要坚定的决心和实际行动。 5. **故事叙述** - 运用插叙手法,如张叔叔的回忆,丰富故事内容,增加叙事深度。 - 结尾往往留给读者思考空间,小女孩的故事未完,...

    安徽专版2020中考英语复习方案完形填空02师之智慧+忠之良言试题人教新目标版

    11. 固定搭配:"cling to"表示紧紧抓住、坚持不放,这里表示人们不愿意改变坏习惯。 12. 名词辨识:"dangers"与"smoking"结合,表示吸烟的危害。 13. 然而转折:"However"用于句首,表示尽管有警告,很多人仍然...

    2018七年级英语上册Unit6Doyoulikebananas单词+重点句型语法解析新版人教新目标版

    我们可以通过"develop/form the habit of…"来培养习惯,或用"break/give up the habit of…"来戒除坏习惯。 4. **形容词"Healthy"及其相关概念**: - "healthy"形容词,表示健康的,其名词形式是"health",副词是...

    山西省永济市涑北中学高三英语复习 专题训练6

    山西省永济市涑北中学高三英语复习专题训练6便是以此为主题,旨在提醒学生在追求知识的同时,也要培养健康的生活习惯,以此来保障身体和心理的全面健康。 首先,我们必须认识到健康的重要性。正如谚语所说,“健康...

    数学建模戒烟问题.doc

    在这些健康问题中,吸烟作为一种导致多种疾病的高危行为,其戒除问题显得尤为重要。全国大学生数学建模竞赛为我们提供了一个平台,通过数学建模的方法来探究影响戒烟成功率的关键因素,并据此提出有效的戒烟策略。...

Global site tag (gtag.js) - Google Analytics