C中最重要的main函数(总结)

void main()

我发现我的C语言教材上都是void main () 的写法,但是现在遇见的代码里面都是 int main () 这样的写法,于是搜到了原因:书上使用了void main( ) ,其实这是错误的。C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 “The definition void main( ) { /* … */ } is not and never has been C++, nor has it even been C.”

main函数是C-LIKE中最重要的函数

几乎每一程序中都会有main函数的身影,mian它影响着程序的编译和执行.我打算从main的运行之前和main运行之后的两个时间对它进行了解。

  1. main运行之前发生了什么
  2. main运行的最后是怎样的

main运行之前的事情

程序在运行之前,一般会经历编译、链接和运行的过程。这些过程可以理解为环境在为程序所要的所有的条件开始调用资源,那么调用的这件事情就是由系统自动创建立的_main函数来完成的,这个函数不会出现在代码中的。

_main在程序启动中干了什么

在看到_main函数时,我认为是main函数的别名或是编译之后的名字,否则在启动代码中再也无法找到和main相关的字眼了。但其实,_main和main是完全两个不同的函数!_main代码,因为这个是编译器自动创建的!可以查看MDK的文档,会发现有这么一句说明:It is automatically created by the linker when it sees a definition of main()。简单点来说,当编译器发现定义了main函数,那么就会自动创建_main。
其实_main主要做这么两件事:初始化C/C++所需的资源,调用main函数。初始化先暂时不说,但“调用main函数”这个功能能够让我们解决为什么启动代码调用的是_main

main 运行之后的事情

当main 成功的调用起了程序所要的其他文件之后,就与之产生了链接,让程序能够正常的运行,当程序结束后就会给系统一个返回值,来告知程序的运行结果。
main函数要求要拥有一个返回值,也就是return 0;着东西,这个返回值的数据类型是整数型会将所有的不同数据转化成为整型。返回值为0的时候,代表的程序正常运行退出,如果不是0,就是程序出了问题。

那为什么会有void main () 的书写方式

有一些书上的,都使用了void main( ) ,其实这是错误的。C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 “The definition void main( ) { /* … */ } is not and never has been C++, nor has it even been C.”
  这可能是因为 在 C 和 C++ 中,不接收任何参数也不返回任何信息的函数原型为“void foo(void);”。可能正是因为这个,所以很多人都误认为如果不需要程序返回值时可以把main函数定义成void main(void) 。然而这是错误的!main 函数的返回值应该定义为 int 类型,C 和 C++ 标准中都是这样规定的。虽然在一些编译器中,void main() 可以通过编译 (比如大一的时候用的vs 2005) 但并非所有编译器都支持 void main() ,因为标准中从来没有定义过 void main 。g++3.2 中如果 main 函数的返回值不是 int 类型,就根本通不过编译。而 gcc3.2 则会发出警告。所以,为了程序拥有很好的可移植性,一定要用 int main ()
那么不给定返回值的main 是不意味着返回为空呢,结果当然是否定的 ,因为规定:不明确标明返回值的,默认返回值为int,也就是说 main()等同于int main(),而不是等同于void

#include <stdio.h>

main()
{
    printf("Hello world\n");
    return 0;
}

这样他会默认返回值是int型,同时如果自己 返回值不是整型数据那么他会自动的进行强制转换。

main的官方规定的定义方式

在最新的C99++标准下,只有
int main (void)
int main (int argc,char *ardv[ ] )
这两种的定义方式是正确的,同样的他们的返回值也必须是int 型的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值