c++中的main函数

本文详细解读C++中Main函数的定义规范,包括int main()的特殊性,启动代码的作用,以及main函数的命名规则和不同形式的使用。特别关注非标准的void main()和Windows编程中的特例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c++句法要求,Main()函数定义以函数头int main()开始。

c++中函数可以被其他函数激活或调用,函数头描述了函数与调用它的函数之间的接口。通常由函数返回类型 函数名 (参数列表/形参列表) 的形式构成。

但是这样的通用格式用于main函数有点奇怪,因为通常不会从程序的其他部分调用main,main()通常被启动代码调用,main是作为程序与操作系统之间的接口。

这里简单介绍一下启动代码

启动代码是一段和硬件相关的汇编代码。由编译器添加到程序中,使程序和操作系统的桥梁,它是一个工程中所必不可少的,他的主要作用是:
1 堆栈( SP)的初始化;
2 初始化程序计数器(PC)
3 设置向量表异常事件的入口地地址;
4 调用Main函数。

简而言之,下面的函数头表明main函数可以给调用它的函数返回一个整数值,且不从调用它的函数那儿获取任何信息

int main()

有些地方需要注意:

main()  //original c style

上面是很多现有程序都使用的经典C函数头,C语言中省略返回类型相当于说函数使int类型,但是c++逐步淘汰了这个用法,可以尝试使用下面的变体:

int main(void)  //非常清楚明白地风格

上面的风格,括号中void指出函数不接受任何参数,在c++(不是c)中,让括号空着和在括号中使用void等效(在c中括号中空着表示对是否接受参数保持沉默)。
还有常使用的下面这种形式:

void main()

逻辑上与int main(void)是一致的,void返回类型意味着不返回任何值,但是该变体不是标准强制的一个选项,所以有些系统上不能工作,要尽量避免这种格式
另外ANSI/ISO C++标准对于抱怨main函数最后需要包含返回语句过于繁琐做出了让步,编译器到达main函数末尾没有遇到返回语句时,默认retrun 0;这种默认仅限于main() 函数。

main()可以使用其他名称吗?

不可以,且大小写和拼写都必须正确,c++程序从main()函数执行,因此,没有main()程序就不完整,编译器将指出未定义main()函数。
当然也有例外情况,例如:

  • 在windows编程中,可以编写DLL模块,这是其他windows程序可以使用的代码。由于DLL模块不是独立程序,因此不需要main()。
  • 还有专用环境的程序——机器人中的控制芯片等也可能不需要。
  • 还有编程环境提供框架程序,该程序调用一些非标准函数,如_tmain()。这种情况下有一个隐藏的main()。
C++程序设计中,main函数是程序执行的入口点,它不是必须放在程序的开始处,但必须能够被编译器找到。关于变量作用域,C++遵循以下规则: 参考资源链接:[C++程序设计试题解析与答案详解](https://wenku.youkuaiyun.com/doc/7ip0wz1zik?spm=1055.2569.3001.10343) 1. 局部变量:在函数或代码块内声明的变量具有局部作用域,仅在该函数或代码块内可见,生命周期从声明点开始,到代码块结束。 2. 全局变量:在所有函数外部声明的变量具有全局作用域,整个程序都可以访问它们,除非被局部变量遮蔽。 3. 形参:函数定义中的参数属于局部作用域,仅在函数体内部有效。 4. 静态局部变量:通过static关键字声明的局部变量,其生命周期贯穿整个程序执行期,但仍然只有在声明它们的函数或代码块内部可见。 main函数可以调用其他函数,这些函数可以是库函数、自定义函数或者main函数本身。函数的调用流程遵循栈的规则,即后调用的函数先执行完毕。 例如,main函数调用函数A,函数A内部又调用函数B,则执行流程是main->A->B->A->main。在这个流程中,每个函数都有自己的局部变量和参数,它们的作用域限定在各自的函数体内。 当函数之间存在嵌套调用时,每个函数都会维护自己的局部作用域,不会影响其他函数内的变量。如果嵌套调用的函数名称相同,则遵循作用域链的规则,最内层的函数会遮蔽外部同名函数的变量。 为了更好地理解和掌握这些概念,推荐参考《C++程序设计试题解析与答案详解》这份资料。它提供了丰富的实例和详细解析,有助于读者深入理解main函数与其他函数的关系以及变量作用域的规则,为学习C++打下坚实的基础。 参考资源链接:[C++程序设计试题解析与答案详解](https://wenku.youkuaiyun.com/doc/7ip0wz1zik?spm=1055.2569.3001.10343)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值