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

那么main函数一共有多少个版本呢?

1、main()

直接的mian()并没有返回值,没有入参。这种写法实际来说,部分编译器会显示警告,并且会返回默认值为int。不过在C89标准中其实是可以的,由于没有声明返回类型,所以才会返回默认值int。

2、void main()

初学者经常会使用的形式,但是并不知道来源在哪,在C89/C99/C11等文档中都没有提到这种形式的痕迹。这种写法的返回值是void,没有参数。值得注意的是,一旦声明是void,在程序退出后,想要获取其退出状态也就不可以了。所以还是不建议返回值为void的。

3、int main(void)

比较常见的写法,这种写法的形参为void,表明它在调用的时候不能传入任何参数,那么它也就不能获取命令行参数了。

4、int main ()

和上面第3种看起来好像没啥区别,但是还是有些许不同。就下面例子来说:

#include<stdio.h>void  test();int main() {     test(4);    return 0; }void test(int a){    printf("%d",a);}

程序仍然可以正常运行,test函数虽然声明为无入参,但调用时却是可以传入任何参数或不传参数的。

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

int argc入参为命令行参数个数,char *argv[]入参为命令行参数数组。这种写法也比较常见的,主要用在需要从命令行获取参数的功能。

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

包含三个参数的一种写法,上面第5种的升级版,int argc是命令行参数个数,char *argv[]是命令参数数组,char *envp[]是环境变量数组。虽然只比第六种多了一个参数,但全局变量environ可以代替envp的作用,获取或者设置环境变量可以使用getenv或putenv,因此也没有必要使用该形式。这种写法多源于编译器的扩展。

上面写了这么多种写法,那么到底写哪种才算是对的?

查阅C89/C99/C11标准文档,里面明确固定了两种写法:

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

所以说,其他的写法并不符合标准,有些算是历史遗留有些算是编译器的扩展,还有些不知道从哪里生出来的。

所以说了这么多,为了代码的通用可移植性,建议采用标准提供的形式,还是推荐使用标准文档中规定的这两种写法。如果一个函数确定无需传入任何参数,那么用void限定是一个不错的选择。

所以说,你明白要怎么写main函数了吗?

-END-

猜你喜欢

雷军 1994 年写的代码,经典老古董。

百度副总裁被抓!

60 个相见恨晚的神器工具

最 后

若觉得文章不错,转发分享,也是我们继续更新的动力。

5T资源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,PCB、FPGA、DSP、labview、单片机、等等

在公众号内回复「更多资源」,即可免费获取,期待你的关注~

长按识别图中二维码关注

C语言 main 函数到底为啥这么写?相关推荐

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

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

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

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

  3. C语言Main函数到底有几种,你真的懂吗?

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

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

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

  5. C语言main函数、return、exit函数

    main函数 说到return,有必要提及主函数的定义.很多人甚至市面上的一些书籍,都使用了void main( )这一形式 ,其实这是错误的. C/C++ 中从来没有定义过void main( ) ...

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

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

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

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

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

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

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

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

最新文章

  1. 用html做一个发送邮件验证,邮件发送还有问题吗?送大家一个写好的类吧,支持stmp认证、HTML格式邮件-PHP教程,PHP应用...
  2. 如何在一台电脑上管理/切换多个github账户
  3. 刀片服务器改台式电脑_服务器到底是个什么东东?跟电脑有啥区别?电脑知识学习!...
  4. 二年级小学生四则运算30道题目编写
  5. 多线程下载工具axel
  6. 忙了12周,手机摄像头模组测试PCB板终于画出来了。
  7. 153. Find Minimum in Rotated Sorted Array找其中的最小值
  8. lr压测mysql数据库_jmeter压测mysql数据库
  9. 【Apollo】【driver】【gnss】适配新的gps设备的方式与经验总结
  10. 评论系统--开发总结
  11. win10通过开启teredo访问ipv6
  12. 回声状态网络(ESN)的公式推导及代码实现
  13. 魅蓝metal刷android 6,魅蓝metal刷机包 Flyme 6.1.0.0Y稳定版 对系统稳定性和功耗表现进行了特定优化...
  14. 当实现两个Activity之间的跳转时,发生 XXX has stoped 或者 XXX keeps stopping
  15. 生产服务器的pcie错误
  16. Unity 历史版本下载
  17. centos8 挂载ntfs_CentOS系统挂载U盘、NTFS移动硬盘
  18. 初探JavaBean
  19. 物理机如何安装Linux centos7
  20. NOIP初赛真题集锦

热门文章

  1. SAP CRM Fiori my Opportunity Etag handling
  2. Uncaught SyntaxError: Unexpected token in body onload
  3. windows10大瘦身 - Lync录屏的临时文件夹清理
  4. SAP ABAP bcset激活时,关联的数据库表条目是如何插入的
  5. ABAP table buffer test
  6. workflow and email in QD3 - IS_INBOX_USER method
  7. Fix error message: maven error: package org.junit does not exist
  8. 如何调整SAP HANA studio里的字体大小
  9. 在SAP Smart Business workspace里创建KPI tile的错误消息分析
  10. sqlplus连接不上oracle,环境变量设置错误导致sqlplus 连接不上oracle