打印
[应用相关]

int main还是void main?

[复制链接]
1679|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhuomuniao110|  楼主 | 2016-4-30 20:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
从大一入学刚接触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。具体见下方链接。
沙发
mintspring| | 2016-4-30 23:22 | 只看该作者
据说是可以有两个参数的,不过在嵌入式里,一般都是返回个0.

使用特权

评论回复
板凳
zhuomuniao110|  楼主 | 2016-5-8 21:22 | 只看该作者
可以通过向导的方式建立文件,这样会给你一个框架。

使用特权

评论回复
地板
zhuotuzi| | 2016-5-8 23:14 | 只看该作者
直接void就行了,从来都这样,从来没错过。

使用特权

评论回复
5
FAQ| | 2016-5-9 10:37 | 只看该作者
楼主很细心

使用特权

评论回复
6
_summer| | 2016-5-9 16:50 | 只看该作者
学习了

使用特权

评论回复
7
E-Kaia| | 2016-5-9 17:36 | 只看该作者
main函数里面的这两个参数是用来做什么的啊

使用特权

评论回复
8
zhuomuniao110|  楼主 | 2016-5-11 21:46 | 只看该作者
E-Kaia 发表于 2016-5-9 17:36
main函数里面的这两个参数是用来做什么的啊

运行时候传递参数的。

使用特权

评论回复
9
zhuomuniao110|  楼主 | 2016-5-11 21:46 | 只看该作者
E-Kaia 发表于 2016-5-9 17:36
main函数里面的这两个参数是用来做什么的啊

传说中的带参运行。比如DOS指令那种。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

207

主题

3384

帖子

10

粉丝