乍一看标题,感觉小编小题大做,但凡学过C语言的聚聚,都知道C程序入口就是main函数,且一套程序里面有且仅有一个。但是很多时候我们看到的main函数却并不是千篇一律,格式竟然会有差别,这究竟是为啥?到底哪一种是对的呢?那么我们这儿来聊一聊这些所谓的main函数。

main()

⚠ 简洁明了,直接孤零零的mian()并没有声明返回值,也没有传入形式参数。讲真如果真这么写,大部分编译器会显示警告,并且会返回值编译器默认会认为是int类型。因为在C89标准中写了,这样写是可以的,由于声明的时候没有声明返回的参数类型,所以编译器自动默认返回int类型。

void main()

⚠ 这种形式是初学者经常会使用的形式,因为好多培训机构就是这么教的,但是大多数聚聚并不知道为什么这么写,或者说是谁规定这么写的,来源在哪儿。这里小编告诉大家,在C89/C99/C11等标准文档中都没有提到这种形式。这种形式的写法声明的返回值是void类型,没有形式参数。很明显,函数如果声明返回类型是void类型,那么在程序退出后,我们是不可以获取其退出的状态的。所以小编这么写,即声明main函数的返回值类型为void类型。

int main(void)

⚠ 这种形式的写法也是聚聚们比较常见的写法。这种写法的形式参数类型为void型,意思程序在调用这个函数的时候不需要也不能传入任何形式的参数,这就意味着,这个函数它本身就不能获得命令行传入的参数了。

int main ()

⚠ 不仔细看还以为小编写错了,和上面第3种看起来好像没啥区别,但是细看还是有不同的地方,形式参数没有写viod,直接空在那边。小编给大家写一段代码,当作为例子给大家讲一讲,下面的程序是可以正常运行,learn函数虽然声明为无形式参数传入,但是我们调用它时,却可以传入任何形式的形参或者直接不传任何参数。

#include
void  learn();
int main()
{     learn(4);return 0;
}
void learn(int a)
{    printf("%d",a);
}

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

⚠ int argc作为形参传入命令行参数个数,char *argv[]作为形参传入命令行参数数组。这种形式的写法是比较正规的,也是C标准中推荐的写法,如果需要从命令行获取参数,那么必须这么写。

int main(int argc,char *argv[],char *envp[])

⚠ 这种形式的写法包含3个形式参数,当然可以看作是上面第5种写法的升级版,int argc形式参数是传入命令行参数个数,char *argv[]形式参数是传入命令参数数组,char *envp[]形式参数是传入环境变量数组。这种写法只比第5种多了一个参数,但我们可以通过全局变量environ代替envp的作用,可以使用getenv或putenv变量来获取或者设置环境变量,因此在没有特别说明或者是需求的情况下,没有必要写成这种形式。

总结,拜读了大神们的帖子及文章,通过查阅C89/C99/C11标准文档再次确认,里面明确给出了2种标准的写法:

int main(void) { /* ... */ }
int main(int argc, char *argv[]) { /* ... */ }

小编写了这么多,就是想告诉大家,想要提高代码的通用性及可移植性,小编建议大家采用以上2种形式来敲我们的main函数。如果确定一个函数不需要传入任何形式参数,那么按照第3中的写法,是一种不错的选择。

声明:

本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

C语言Main函数到底有几种,你真的懂吗?相关推荐

  1. 写的函数符号表里没有_你有没有想过,C语言 main 函数到底为啥这么写?

    但凡是学过C语言的人,都知道要先写main函数,然而很多时候我们看到的main函数却各有差异,这究竟是为啥?哪种是对的呢?今天我们就来聊聊main函数. 那么main函数一共有多少个版本呢? 1.ma ...

  2. C语言 main 函数到底为啥这么写?

    但凡是学过C语言的人,都知道要先写main函数,然而很多时候我们看到的main函数却各有差异,这究竟是为啥?哪种是对的呢?今天我们就来聊聊main函数. 那么main函数一共有多少个版本呢? 1.ma ...

  3. char怎么比较_C语言的 main 函数到底怎么写才是对的?

    相信各位对C语言中的 main 函数大家都再熟悉不过了,这是你学习C语言首先就要学习的东西,但是我看过很多人写的代码包括我的一些读者在main函数的写法方面版本很多,今天就跟大家聊一聊main函数到底 ...

  4. c语言srand函数怎么用_C语言的main函数到底该怎么写

    前言 从开始学习C语言到现在,我们似乎看到了很多个版本的main函数,那么哪一种才是正确的呢?我们先来看看目前有哪些版本. main函数版本 第一种,没有返回值,没有入参: main() 在C89标准 ...

  5. C语言 main 函数参数 main(int argc, char *argv[]) - C语言零基础入门教程

    目录 一.main 函数写法 二.main 函数参数简介 三.使用 main 函数参数 1.打印 main 函数参数 a.直接运行 exe 文件 b.打开 cmd 命令行窗口执行 exe 文件 c.打 ...

  6. C语言 main 函数 - C语言零基础入门教程

    目录 一.main 函数简介 二.main 函数写法 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.main 函数简介 main 函 ...

  7. c语言编程main,C语言main()函数

    C 语言有两种可能的运行环境中,它们之间有一定差别: (1) 独立环境(freestanding) 在独立环境中,C 程序的运行没有操作系统的支持,因此,只具有最小部分的标准库能力. (2) 宿主环境 ...

  8. C语言main函数参数、返回值

    C语言main函数返回值: main函数的返回值,用于说明程序的退出状态.如果返回0,则代表程序正常退出:返回其他数字的含义则由系统决定,通常,返回非零代表程序异常退出,即使程序运行结果正确也仍需修复 ...

  9. 详解c语言main函数、printf函数、scanf函数与va家族

    C语言入门与提升(1)--详解c语言main函数.printf函数与scanf函数,与va家族 前言: 为什么要学习C语言呢?C语言作为最古老的语言之一,走过了半个多世纪的风风雨雨,至今仍然长盛不衰, ...

最新文章

  1. python竞赛试题及答案_Python全国少儿编程竞赛参赛作品《自主数学练习小工具》解析...
  2. Java JFrame实现全屏的四种方式
  3. boolean类型_JS核心理论之《数据类型、类型转换、深浅拷贝与参数传递》
  4. 《大话设计模式》6个原则 转帖
  5. qiankun 微前端_qiankun 微前端应用实践与部署(二)
  6. filter过滤器实现验证跳转_返回验证结果
  7. 3_less混和(使用类来混合)
  8. ubuntu 下可以尝试还不错的屏幕截图工具: flameshot
  9. illegal utf8 encoding at (190)
  10. PAT (Advanced Level) 1051. Pop Sequence (25)
  11. linux路由表的查看和含义
  12. 大白菜u启动盘安装linux,大白菜U盘启动pe装系统教程
  13. 第三章 教育法律法规
  14. Ubuntu部署YAPI
  15. 从移动为例,看运营商的大数据能力
  16. Java小游戏之《大鱼吃小鱼》
  17. 原创 关于微信拼车小程序开发的需求分析(分析建模)
  18. 过零检测法MATLAB仿真,过零检测 - MATLAB Simulink - MathWorks 中国
  19. Python open()方法中的newLine参数
  20. 长沙哪个服务器网速最快,5G网络湖南长沙首秀?网速是4G的60倍,快的让人无法想象...

热门文章

  1. jpa获取session_JPA 2 | 获取联接以及我们是否应该使用它们
  2. lambda表达式方法泛型_模板方法模式–使用Lambda表达式,默认方法
  3. 枚举:如何正确使用name()和toString()方法
  4. 实践中的弹性基础架构
  5. jenkins api_接触Jenkins(Hudson)API,第1部分
  6. 可行的DeltaSpike教程
  7. Vaadin和DukeScript中的Hello World
  8. JUnit:使用Java 8和AssertJ 3.0.0测试异常
  9. 您的Apache Camel应用程序现在包括现成的文档
  10. 在Java中确定文件类型