当前位置: 首页 > news >正文

C语言main函数到底该怎么写?6种写法全解析

作为C程序入口函数的main函数,程序执行起始于它,其他函数的调用直接或间接在其中被进行,那么main函数又是被谁所调用呢,答案是操作系统,C语言发展至今存在多种不同写法的main函数,下面就来探究一下各类不同的写法,注:测试环境是Ubuntu 17.10,GCC版本是7.2.0。

NO.1

main(){}

例:

#include main(){ printf("Hello World\n"); }

NO.2

void main(){}

例:

#include void main(){ printf("Hello World\n"); }

NO.3

int main(){}

例:

#include int main(){ printf("Hello World\n"); return 0; }

NO.4

int main(void){}

例:

#include int main(void){ printf("Hello World\n"); return 0; }

NO.5

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

例:

#include int main(int argc,char *argv[]){ printf("Hello World\n"); return 0; }

NO.6

int main(int argc,char **argv){}

例:

#include int main(int argc,char **argv){ printf("Hello World\n"); return 0; }

上面测试的情况是这样子的,写法1,在C90标准状况下能够正常进行编译,然而在C99以及C11标准状况下,会抛出一个警告,这是因为不写返回值的话,默认的返回值是int类型了,也可以这么说,写法1和写法3是等价的。写法2至6,在C90、C99、C11标准状态下,都能够正常进行编译。那么在这么多的写法当中,究竟哪些才是main函数的标准写法?于是去查阅了C标准文档对于main函数的规范写法,如下所示:

看得出,于标准文档里,写法4、5、6才是main函数的规范写法,写法5跟写法6是等价的,那为何会有写法1、2、3呢?那是因从1972年C语言被设计出来至C90标准发布这段时间,C语言各异的实现致使了main函数的差异性,强烈不推荐写法2。因为main函数是由操作系统调用的,操作系统会依据main函数的返回值判定程序是否正确执行,若返回void,那代表的是什么状态呢?并且存在一些编译器支持这般写法,而另一些编译器却不支持,然而所有的标准均未认同这种写法。针对写法1以及写法3勉强还能够予以接受,可是也并不建议如此书写,最好还是依照标准写法去写。为何要依照标准写法书写呢?那是由于为了使C程序具备更好的移植性。写法5跟写法6是等效的,首个参数表示main函数参数的数量,第二个参数借助指针分别指向这些参数。argv代表程序名,argv直至argv代表程序参数。下面再看看main函数的返回值问题,见下图

从图里能够看出,要是main函数的返回值属于int类型的兼容类型,那么从main函数返回之后的值,与exit一起,就如同执行了exit xxx。其中xxx指的是从main函数返回后的值。要是忘记写return语句,在执行到main函数体的右大括号}时,会返回默认值0。返回0意味着程序执行成功,程序将会退出。要是main函数的返回类型并非int类型的兼容类型,程序返回给操作系统的状态就会不明确。

http://www.jsqmd.com/news/581920/

相关文章:

  • 2026年农民工工资保函担保公司如何选择?一份专业排名与对比指南 - 速递信息
  • 2026年揭秘:GEO搜索优化公司如何赢得专业好名声?
  • Mac Mouse Fix安装方式决策指南:从需求分析到方案选择
  • Vin象棋:基于AI视觉的中国象棋智能辅助工具,轻松提升对弈水平
  • 钢边木箱主流方案横向评测分析
  • 提升爬虫效率:基于clawhub与快马平台实现自动化数据抓取与处理
  • PLA打印革命:AI算法破解行业痛点
  • 上海隔绝工地噪音门窗多少钱,凤铝新家装门窗工厂费用合理吗 - 工业品网
  • 反模式:从工程结果反推日常决策
  • 突破语言壁垒:Axure RP 9/10/11 极速汉化解决方案
  • # Java Web自研框架18年架构决策复盘(系列文)
  • 网络安全入门:SQL注入从原理到实战
  • Visual C++运行库一站式解决方案:从问题排查到高级应用指南
  • (2)JVS物联网平台“设备管理模块功能说明”
  • 开源工具G-Helper实现华硕笔记本色彩配置修复与显示优化的完整方案
  • 20260403_151844_字节大模型二面:Agent的记忆覆盖问题如何解决?
  • 如何使用Unlocker工具在VMware中启用macOS虚拟机支持
  • java Day08-2
  • 告别滚动混乱:Scroll Reverser让macOS输入设备各得其所
  • Windows与Office激活神器:KMS_VL_ALL_AIO全面使用指南
  • 利用快马平台快速集成豆包AI,十分钟搭建智能对话应用原型
  • 3分钟免费搞定Axure RP中文汉化:完整语言包安装指南
  • CDA证书能帮助做经营分析吗?财务人最关心的几个实际问题
  • ITIL流程为什么落不了地?自动化与AI如何真正改变IT服务管理的执行力
  • Gerbv:免费开源Gerber文件查看器的终极指南,PCB设计验证的得力助手
  • LoRA训练助手在时间序列预测中的创新应用
  • 2026最权威的AI科研方案解析与推荐
  • XGP-save-extractor:Xbox玩家的跨平台存档迁移利器
  • springboot中的消息队列和用法
  • 2026届最火的AI辅助论文网站横评