从大一入学刚接触C到如今已满7个月了,虽然刚开始就知道```int main```才是标准的写法,但一直没有深入理解为何不能用```void main```而必须使用```int main```。html
恰好最近有非计算机相关专业学C的同窗问我```int main```、```main```和```void``` ```main```有什么区别,便以为是时候好好整理一番了,因而有了此博客。编程
先简而言之
1.void 和 int 代表声明不一样的主函数返回值,不声明则默认返回值为int整型。
2.int main可移植性强。
3.C语言历来没声明过```void main```,只声明过```main()```。
3.抛弃一切用```void main```编写C程序的习惯!windows
稍微深刻数组
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```是一个良好的变成习惯)。url
学校老版教材推荐编写C程序时使用的 VC6.0 是98年的产品,而C99标准见名思义在1999年制定,所以VC 不会自动添加```return 0;```。Windows下建议尝试使用DEV C++或Visual Studio的IDE环境(集成开发环境)写C代码。spa
再深刻一点操作系统
在最新的 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。具体见下方连接。
参考连接和可深刻理解C的其它连接:
main函数_百度百科:http://baike.baidu.com/link?url=QPL_sSuIxACVYcdTzY43iXtxLGWUPY8inpjL2hZZPFscJZehGeHPUlqf_qG2xPtKKY-tlZPrm78Rsw3TwM-D7a#4_3
C99_百度百科:http://baike.baidu.com/link?url=wGdu4AOAT462i_loNUmdUSqMYXoE-Dur0qQSuHRkXbdy-ib-wMnLp7rrJIwhh_tkf1fICH4JcUkMZ_4n_yIOy_
void main()仍是int main()_百度贴吧:http://tieba.baidu.com/p/2085028518
int main(int argc,char* argv[])详解:http://www.cnblogs.com/avril/archive/2010/03/22/1691477.html
C语言启动代码:http://blog.sina.com.cn/s/blog_53c1950a01011vch.html