main函数究竟应该怎么写?

文章开始之前,先聊聊工作的话题。个人感觉程序员应该是人员流动比较大的职业,我也在上个月辞去了自己的第一份工作。辞职容易,找工作难,找一份满意的工作更难。不仅要求你能熟练使用开发语言,还要你熟悉常用的框架,还要你懂各种算法,操作系统原理,各种协议等等。你还得有自己的拿得出手的作品才行。csdn或stackoverflow的积分,个人的技术blog,github的开源代码都是很好的加分项。如果你是做android开发的,你最好能自己开发个应用放到google play去。与其在同等级别的公司间跳来跳去,还不如沉下心来看看书,坚持写blog,多练练手,顺便开源些好的项目。为下一次跳槽做好充分的准备。

在大多数程序语言里,程序由main函数开始执行,因此被称之为入口函数。然而,当你学了编程一段时间后,你肯定见过不止一种main函数的写法。你有木有想过,究竟那种写法才算是标准的呢?毕竟各个平台对编译器的实现有所不同,往往标准的部分是相同的。如果你的程序是按标准来写的,那意味着你的程序是跨平台的。在这篇文章,我们来谈谈c,c++里main函数该如何写。

标准C

那C99来说吧,标准规定main函数应该定义为返回int类型,且带有0个参数或2个参数,即如下形式:
int main(void) { /* ... */ }
int main(int argc, char *argv[]) { /* ... */ }
或其他等价形式,如char *argv[]可以写成char **argv。说到这里,顺便提一下,argc指的是argument count,这个大家没有疑问。但argv有人说是argument values,其实是不对的,argv应该指argument vector(the vector term in this variable's name is used in traditional sense to refer to strings)。


当你看老版的c语言程序时,可能会看到
main()
这种写法。c90允许这么写,c99不允许了。以前这么写是表示默认返回int类型,而参数列表()表示接受任意个参数。现在我们坚决反对这种形式。

int返回类型的作用在于表明程序是如何退出的。0或 EXIT_SUCCESS  表示正常退出, EXIT_FAILURE表示非正常退出。stdlib.h中提供了这两个宏;两个参数分别表示字符串个数和字符串数组,举例:gcc -o a a.c,那么argc=4,argv分别是
argv[0]---------> "gcc"
argv[1]---------> "-o"
argv[2]---------> "a"
argv[3]---------> "a.c"
gcc通过解析这些参数,知道要编译a.c文件并生成一个名叫a的可执行程序。
你可以省略main的返回语句,默认将返回0

标准C++

标准c++11规定
1.一个程序应该包含一个叫main的全局函数
2.main函数不应该被重载,main必须返回int类型。所有的实现应允许以下两种写法
int main() { /* ... */ }
int main(int argc, char* argv[]) { /* ... */ }
3. The function  main  shall not be used within a program.
也就是你不应该在其他函数里调用main或者&main等操作。但是目前很多编译器好像是允许你去调用main的。
4.如果main省略了返回语句,那相当于return 0;

c++标准明确表示main应该返回int类型,因此返回void是没法通过编译的。

扩展

一般地,Uinx支持第三种扩展形式
int main(int argc, char **argv, char **envp) { ... }
Mac OS X还有
int main(int argc, char **argv, char **envp, char **apple);
【转载请注明出处: http://blog.csdn.net/booirror/article/details/12916555
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值