C语言Main函数到底有几种,你真的懂吗?
乍一看标题,感觉小编小题大做,但凡学过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函数到底有几种,你真的懂吗?相关推荐
- 写的函数符号表里没有_你有没有想过,C语言 main 函数到底为啥这么写?
但凡是学过C语言的人,都知道要先写main函数,然而很多时候我们看到的main函数却各有差异,这究竟是为啥?哪种是对的呢?今天我们就来聊聊main函数. 那么main函数一共有多少个版本呢? 1.ma ...
- C语言 main 函数到底为啥这么写?
但凡是学过C语言的人,都知道要先写main函数,然而很多时候我们看到的main函数却各有差异,这究竟是为啥?哪种是对的呢?今天我们就来聊聊main函数. 那么main函数一共有多少个版本呢? 1.ma ...
- char怎么比较_C语言的 main 函数到底怎么写才是对的?
相信各位对C语言中的 main 函数大家都再熟悉不过了,这是你学习C语言首先就要学习的东西,但是我看过很多人写的代码包括我的一些读者在main函数的写法方面版本很多,今天就跟大家聊一聊main函数到底 ...
- c语言srand函数怎么用_C语言的main函数到底该怎么写
前言 从开始学习C语言到现在,我们似乎看到了很多个版本的main函数,那么哪一种才是正确的呢?我们先来看看目前有哪些版本. main函数版本 第一种,没有返回值,没有入参: main() 在C89标准 ...
- C语言 main 函数参数 main(int argc, char *argv[]) - C语言零基础入门教程
目录 一.main 函数写法 二.main 函数参数简介 三.使用 main 函数参数 1.打印 main 函数参数 a.直接运行 exe 文件 b.打开 cmd 命令行窗口执行 exe 文件 c.打 ...
- C语言 main 函数 - C语言零基础入门教程
目录 一.main 函数简介 二.main 函数写法 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.main 函数简介 main 函 ...
- c语言编程main,C语言main()函数
C 语言有两种可能的运行环境中,它们之间有一定差别: (1) 独立环境(freestanding) 在独立环境中,C 程序的运行没有操作系统的支持,因此,只具有最小部分的标准库能力. (2) 宿主环境 ...
- C语言main函数参数、返回值
C语言main函数返回值: main函数的返回值,用于说明程序的退出状态.如果返回0,则代表程序正常退出:返回其他数字的含义则由系统决定,通常,返回非零代表程序异常退出,即使程序运行结果正确也仍需修复 ...
- 详解c语言main函数、printf函数、scanf函数与va家族
C语言入门与提升(1)--详解c语言main函数.printf函数与scanf函数,与va家族 前言: 为什么要学习C语言呢?C语言作为最古老的语言之一,走过了半个多世纪的风风雨雨,至今仍然长盛不衰, ...
最新文章
- python竞赛试题及答案_Python全国少儿编程竞赛参赛作品《自主数学练习小工具》解析...
- Java JFrame实现全屏的四种方式
- boolean类型_JS核心理论之《数据类型、类型转换、深浅拷贝与参数传递》
- 《大话设计模式》6个原则 转帖
- qiankun 微前端_qiankun 微前端应用实践与部署(二)
- filter过滤器实现验证跳转_返回验证结果
- 3_less混和(使用类来混合)
- ubuntu 下可以尝试还不错的屏幕截图工具: flameshot
- illegal utf8 encoding at (190)
- PAT (Advanced Level) 1051. Pop Sequence (25)
- linux路由表的查看和含义
- 大白菜u启动盘安装linux,大白菜U盘启动pe装系统教程
- 第三章 教育法律法规
- Ubuntu部署YAPI
- 从移动为例,看运营商的大数据能力
- Java小游戏之《大鱼吃小鱼》
- 原创 关于微信拼车小程序开发的需求分析(分析建模)
- 过零检测法MATLAB仿真,过零检测
- MATLAB Simulink
- MathWorks 中国
- Python open()方法中的newLine参数
- 长沙哪个服务器网速最快,5G网络湖南长沙首秀?网速是4G的60倍,快的让人无法想象...
热门文章
- jpa获取session_JPA 2 | 获取联接以及我们是否应该使用它们
- lambda表达式方法泛型_模板方法模式–使用Lambda表达式,默认方法
- 枚举:如何正确使用name()和toString()方法
- 实践中的弹性基础架构
- jenkins api_接触Jenkins(Hudson)API,第1部分
- 可行的DeltaSpike教程
- Vaadin和DukeScript中的Hello World
- JUnit:使用Java 8和AssertJ 3.0.0测试异常
- 您的Apache Camel应用程序现在包括现成的文档
- 在Java中确定文件类型