main函数称之为主函数,一个C程序总是从main()函数开始执行的。在关于C语言的网贴和图书中,可以看到main函数的多种格式,这些格式,有的是正确的,有的是不正确的,为了避免错误,现归纳整理如下。

  一、main函数头的格式:

  1.int main(int argc, char *argv[])

  推荐指数:★★★★★

  有参数的格式,这是符合C89、C99标准的写法。第一个参数argc(argument count)是命令行中的字符串个数。第二个参数argv(argument value)是一个指针数组,一般程序名赋值给argv[0],从argv[1]开始对各个参数依次赋值。

  如执行命令:dir /a /p

  则:argc=3,argv[0]=dir,argv[1]=/a,argv[2]=/p

int main(int argc, char *argv[])
{ return ;
}

  2.int main(void)

  推荐指数:★★★★★

  无参数的格式,这是符合C89、C99标准的写法。

int main(void)
{ return ;
}

  3.int main()

  推荐指数:★★★☆☆

  无参数的格式,相当于第2种写法,C89标准中允许,常用的编译器也支持这种写法,但不符合最新的 C99 标准。

int main()
{ return ;
}

  4.main()

  推荐指数:★☆☆☆☆

  无参数的格式,相当于第3种写法,C89标准中允许,但不符合C99 标准。第一版的C语言只有int一种类型,没有char,long,float等,既然只有一种类型,那么就可以不写,后来的改进版为了兼容以前的代码于是规定:不明确标明返回值的,默认返回值为int,也就是说 main()等同于int main()。在C99标准中,要求编译器至少给 main() 这种用法来个警告。尽管这种写法也能通过编译,但强烈建议不要因为少敲几个字母而去这么写。

main()
{ return ;
}

  5.void main()

  推荐指数:☆☆☆☆

  不推荐这种写法。在 C 和 C++ 中,不接收任何参数也不返回任何信息的函数原型为“void foo(void);”。可能正是因为这个,所以很多人都误认为如果不需要程序返回值时可以把 main函数定义成void main(void) 。然而这是错误的!main 函数的返回值应该定义为 int 类型,C 和 C++ 标准中都是这样规定的。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地表示:void main( ) 的定义从来就不存在于 C++ 或者 C 。虽然有的编译器中,void main 可以通过编译(如 vc6),但标准中从来没有定义过 void main 。所以,如果你想你的程序拥有很好的可移植性,请一定要用int main。

void main()
{ }

  二、main函数返回值:

  main函数的返回值类型是int型的,而程序最后的 return 0正与之呼应,0就是main函数的返回值。那么这个0返回到那里呢?返回给操作系统,表示程序正常退出。

  如果main函数的最后没有写return语句的话,C99规定编译器要自动在生成的目标文件中加入return 0,表示程序正常退出。注意,C-Free的MinGW5编译器自动加入的是return 1,VC6不会在目标文件中加入return 0。尽管省略return语句后,C-Free和VC6等一些编译器也能通过编译,但仍建议最好加上return语句,养成良好的遵守标准的习惯。

最新文章

  1. cocos2d-x:Particle System(粒子系统)
  2. SQL-server的事务,视图和索引
  3. MD5加密操作
  4. 【AHOI2014复仇】
  5. nmp install 异常
  6. centos生成公钥私钥 securecrt通过公钥访问服务器 winscp通过公钥访问服务器
  7. IDEA 护眼色设置 背景行颜色取消等设置
  8. 观察者模式与.Net Framework中的委托与事件
  9. HttpServletResponse简单理解
  10. LVS的DR模式测试案例<仅个人记录>
  11. 分析Hello2代码
  12. Elasticsearch数据迁移工具elasticdump工具
  13. springboot搭建环境整合jsp页面整合mybatis
  14. jquery选择器总结2
  15. Python中的装饰器的使用及固定模式
  16. C++实现线程同步的几种方式
  17. springmvc+mybatis+redis实现查询插入操作
  18. 诱惑当前 你的孩子能hold住吗?
  19. MongoDB整理笔记のDump & Restore
  20. Dataguard ORA-19909 ORA-01110

热门文章

  1. oracle存储过程分页
  2. .NET自动识别HttpWebResponse的编码及是否压缩
  3. python(5)–random模块及验证码
  4. 如果将WCF服务发布为rest模式
  5. 虚拟机中Ubuntu设置固定IP方法
  6. C# 为网络程序添加用户代理
  7. 使用iTextSharp来填充PDF模板文件
  8. 百练 2973 Skew数 解题报告
  9. Javascript之换肤(未完待续)
  10. Swift扩展(Extension)