从大一入学刚接触C到现在已满7个月了,虽然刚开始就知道```int main```才是标准的写法,但一直没有深刻理解为什么不能用```void main```而必须使用```int main```。

刚好最近有非计算机相关专业学C的同学问我```int main```、```main```和```void``` ```main```有什么区别,便觉得是时候好好整理一番了,于是有了此博客。

先简而言之
1.void 和 int 表明声明不同的主函数返回值,不声明则默认返回值为int整型。
2.int main可移植性强。
3.C语言从来没声明过```void main```,只声明过```main()```。
3.抛弃一切用```void main```编写C程序的习惯!

稍微深入

main函数,又称主函数,作为绝大大部分C程序唯一的入口(比如windows编程中可以编写一个其他windows程序都可以使用的动态链接库(dll)模块,由于DLL模块不是独立的程序,因此不需要main函数。再比如,用于专业环境的程序-----如机器人中的控制芯片--可能不需要main函数),是要求有返回值的,该返回值返回给操作系统来表明改程序的执行状况。返回0代表程序正常执行成功,返回非0值代表程序异常结束,因此返回值需要是int整型,于是有了```int main()```的规范。如果使用```void main```,既声明主函数没有返回值的话,程序随能编译、运行成功,却不利于操作系统判断其状态,这对于由很多C程序构成的大型项目来说是可能会是致命的。

尤其从c99标准(1999年制定的官方C语言标准第二版)开始必须使用```int main```,如果没加```return 0;```语句C99要求编译器自动添加(自己写上是个好习惯)。只声明```main```的话系统默认为```int main```。```void main```无论何时都不应该使用因为主函数必须有返回值表明程序运行状态(在很少的代码中最少不使用```void main```是一个良好的变成习惯)。

学校老版教材推荐编写C程序时使用的 VC6.0 是98年的产品,而C99标准见名思义在1999年制定,因此VC 不会自动添加```return 0;```。Windows下建议尝试使用DEV C++或Visual Studio的IDE环境(集成开发环境)写C代码。

再深入一点

在最新的 C99 标准中,只有以下两种定义方式是正确的:

int main(void){}//整数类型主函数(无类型)
int main(int argc,char **argv)//整数类型主函数(整数类型 统计参数个数,字符类型*数组指针至字符[])

如果没有int main并且不是return 0;的话,编译完C程序后生成了exe文件,在DOS(按下Windows键+r键后输入cmd打开)下用执行该文件的命令时(比如是1.exe),语句后面加上 && dir 就会发现并没有列出当前目录的列表!(&& 是按先后顺序执行两条命令的连接符,dir命令在DOS下用来列出当前所在文件下的目录列表的~)

为什么没执行成功dir命令呢?正是因为写的C程序没有返回值,操作系统认为程序没有成功执行完毕,因此就不会执行 && 后面的dir命令了…

上面两种正确的定义方式一般接触C语言阶段用前者足以,括号里面的void指明主函数并不需要参数,而后者:

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

表明main函数返回值为整型,带两个参数,argc为命令行参数的个数,argv为指针数组,前argc个指针为参数列表,最后一个指针值为NULL。具体见下方链接。

int main() 与 void main()相关推荐

  1. int main()和void main()的区别

    int main() 括号里面为空代表不确定参数,并不是说不带参数.如果要告诉编译器函数不带参数,做法是:int main(void) int main()需要返回一个整形值,也就是我们经常会看到在这 ...

  2. int main()与void main()的区别

    在C语言中,看到有的程序是int main,有的程序是void main,不清楚什么时候该使用哪个,,,看完我的文章,保证秒懂( ̄∀ ̄) 首先要了解 int是整形函数,void表示无, main表示头 ...

  3. int main()与void main()区别?

    在学习C语言的过程中,会习惯性的将int main()写为void main(),两者有什么区别? 1.int main() 在 C99 标准中,有两种正确的使用方式: int main( void ...

  4. int main()和void main()

    void main 和 int main的区别就是有无返回值. 在int main 可以出现非 int 类型的东西.在写代码时,一个函数要么有返回值,要么没有返回值没有返回值就用void来表示. ma ...

  5. int main()和void main()有什么区别

    其实main也是一个函数: #include<stdio.h> void main(){} 如上代码所示,void main() 这样定义只是说明main函数没有返回值. #include ...

  6. C语言-int main()与void main()

    你有没有想过 int main()  void main() 怎么选? 前言: // C 语言中的函数定义的一般形式如下return_type function_name( parameter lis ...

  7. int main与void main的区别

    正确而且标准的方式应该是int main()或者int main(int argc, char* argv[])

  8. 浅谈c/c++中main(),int main(),void main(),int main(void)四者之间的区别

    一.主函数也是函数 首先我们要了解C/C++中函数的定义,因为main函数也是函数,与其他函数的区别只是主函数是程序的主线而已,程序从它开始也在其中结束.一个函数由函数名.其前的类型标识符.其后小括号 ...

  9. 错误 LNK2019 无法解析的外部符号 main,函数 “int __cdecl invoke_main(void)“ (?invoke_main@@YAHXZ)

    项目场景: 在C++调试OnnxRuntime推理模型过程中遇到错误 问题描述 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2019 无法解析的外部符号 main,函数 " ...

最新文章

  1. 【SQL】SQL语句多表联合查询
  2. 经典C语言程序100例之三六
  3. ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象...
  4. 一次完整的http的请求过程与https的实现
  5. jedisPool.getResource()方法长时间无响应并且不报错
  6. shopify 开发_播客第57集:从Shopify的作家到开发人员,与Adam Hollett一起
  7. UML系列——OO Unit4分析和学期总结
  8. 解决微信调整字体大小导致Html5页面混乱
  9. chown: `mysql#039;: invalid user_centos无法正常启动,报chown: invalid user:'root:root'
  10. 【Spring-AOP】源码分析汇总
  11. 浅谈IPFS新激励层Filenet究竟是什么,令牌、公链、应用?超级云系统!
  12. Jquery UI 教程
  13. AJDK-Wisp协程
  14. Win10 微软拼音添加小鹤双拼以及其他配置
  15. Ureport2 ---报表设计(1)
  16. 0920-TCP断线重连 reconnect
  17. 免费的网课API接口附加题库
  18. 第10章应对日常生活中的稀缺
  19. 多层神经网络 ——小批量梯度下降法
  20. C# Xamarin For Android移动开发项目实战篇

热门文章

  1. Elasticsearch就这么简单
  2. WPF应用程序内嵌网页
  3. GitHub(从安装到使用)
  4. 牛客网Java刷题知识点之关键字static、static成员变量、static成员方法、static代码块和static内部类...
  5. python之工作举例:通过复制NC文件来造数据
  6. bzoj1670【Usaco2006 Oct】Building the Moat 护城河的挖掘
  7. wenzhixin bootstrap-table 点击table单元格改变颜色
  8. php 安装xdebug扩展
  9. BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会 树形DP
  10. WEB/H5性能优化总结