为什么每个C程序都需要一个叫做 main 的函数?

news2024/11/17 22:36:38

文章目录

  • 1、为什么每个C程序都需要一个叫做main的函数?
  • 2、为什么 C 的 main 函数可以通过调用 exit 或者执行一条 return 语句来结束,或者两者都不做,而程序依然可以正确终止?

1、为什么每个C程序都需要一个叫做main的函数?

当加载器运行时,它创建如下图所示的存储器映像。
在这里插入图片描述
在可执行文件中段表头的指导下,加载器将可执行文件的相关内容拷贝到代码和数据段。

接下来,加载器跳转到程序的入口点,也就是符号 _start 的地址。在 _start 地址处的 启动代码(startup code)是在目标文件 ctrl.o 中定义的,对所有的 C 程序都是一样的

下图是启动代码中特殊的调用序列:
在这里插入图片描述
对调用序列更详细的说明见文章加载可执行目标文件。

现在来回答问题:每个程序都需要一个 main 函数,因为 C 的启动代码对于每个程序而言都是相同的,要跳转到一个叫做 main 的函数上。

2、为什么 C 的 main 函数可以通过调用 exit 或者执行一条 return 语句来结束,或者两者都不做,而程序依然可以正确终止?

  • 如果 mainreturn 语句终止,那么控制传递回启动程序,该程序通过调用 _exit 再将控制返回给操作系统。
  • 如果用户省略了 return 语句,也会发生相同的情况。
  • 如果 main 是以调用 exit 终止的,那么 exit 将最终通过调用 _exit 将控制返回给操作系统。

在这三种情况中,最终效果是相同的:当 main 完成时,控制会返回给操作系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/545527.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文阅读记录(1)

这一周读了2021cvpr的《Learning to Filter: Siamese Relation Network for Robust Tracking》。这篇文章的创新点: Relation Detector。关系检测器。关系检测器在本文中以元学习的方式执行,以获得从背景中过滤干扰物的能力。Refinement Module。x细化模…

canal学习-运行canal-adapter源码并记录解决报错问题(包含缺失的jar文件)(一)

运行canal-adapter 1. 下载canal源码1.1 下载源码并安装好环境1.2 查看目录结构 2.项目运行2.1 项目打包2.2 项目打包可能遇到的问题:1.Failure to find com.alibaba.otter:connector.tcp:jar:jar-with-dependencies:1.1.52.com.alibaba.druid.pool.DruidDataSource…

数字信号处理基础(三):FIR滤波器的设计

目录 1. 滤波器1.1 低通滤波器1.2 高通滤波器1.3 带通滤波器1.4 带阻滤波器 2. 完整代码3. 结果图 1. 滤波器 1.1 低通滤波器 低通滤波器需要知道低通截止频率,然后采用以下代码实现 % 低通滤波器设计 fp2*10000; % 低通滤波器截止频率&#x…

安全测试之使用Docker搭建SQL注入安全测试平台sqli-labs

1 搜索镜像 docker search sqli-labs 2 拉取镜像 docker pull acgpiano/sqli-labs 3 创建docker容器 docker run -d --name sqli-labs -p 10012:80 acgpiano/sqli-labs 4 访问测试平台网站 若直接使用虚拟机,则直接通过ip端口号访问若通过配置域名&#xff0…

2023-5-20-各种编译器的全面学习

🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿 💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥 💟💟喜欢的朋友可以关注一下&#xf…

网站投票软件投票链接制作软件投票链接小程序投票程序

近些年来,第三方的微信投票制作平台如雨后春笋般络绎不绝。随着手机的互联网的发展及微信开放平台各项基于手机能力的开放,更多人选择微信投票小程序平台,因为它有非常大的优势。 1.它比起微信公众号自带的投票系统、传统的H5投票系统有可以图…

LLVM-Clang交叉编译详细教程

文章目录 前言对比GCC与ClangClang交叉编译参数选项安装交叉编译器交叉编译生成二进制文件Target Arch列表Target Triple列表参考文档后话 前言 最近自己写了个C的小项目,想在Windows编译出其他平台的二进制文件的话,只能交叉编译了,于是就选…

性能测试-JMeter分布式测试及其详细步骤

性能测试概要 性能测试是软件测试中的一种,它可以衡量系统的稳定性、扩展性、可靠性、速度和资源使用。它可以发现性能瓶颈,确保能满足业务需求。很多系统都需要做性能测试,如Web应用、数据库和操作系统等。 性能测试种类非常多,…

深入学习《c语言函数》

📕博主介绍:目前大一正在学习c语言,数据结构,计算机网络。 c语言学习,是为了更好的学习其他的编程语言,C语言是母体语言,是人机交互接近底层的桥梁。 本章学习函数。 让我们开启c语言学习之旅吧…

Mybatis管理数据库

快速入门 使用idea工具操作数据库使用Mybatis查询所有用户数据第一步创建springboot工程,数据库表user,实体类User第二步,引入Mybatis的相关依赖,配置Mybatis(数据库连接信息)第三步,编写sql语句…

Jmeter工具+ant+jenkins实现持续集成

jmeterantjenkins持续集成 一、下载并配置jmeter 首先下载jmeter工具,并配置好环境变量;参考: jmeter默认保存的是.jtl格式的文件,要设置一下bin/jmeter.properties,文件内容,保存jmeter.save.saveservice.output_f…

关于华为云负载均衡ELB健康检查显示离线的排查问题及解决办法

由于项目中经常涉及到检修升级操作,在进行检修升级时,服务就需要停止一段时间,检修结束后重启,在此期间相关的功能页面都将无法访问。甲方反馈,需要停止服务的检修工作暂时不予执行。因此,为了不耽误系统的…

低代码搭建制造管理系统,你要知道的哪些事~

随着数字化转型的推进,制造业也逐渐意识到数字化转型的重要性。数字化转型不仅可以提高制造业的效率和品质,还可以降低成本和提高客户满意度。在数字化转型中,低代码搭建制造管理系统是一种比较有效的方式。本文将介绍低代码搭建制造管理系统…

深入篇【C++】类与对象:再谈构造函数之初始化列表与explicit关键字

深入篇【C】类与对象&#xff1a;再谈构造函数之初始化列表与explicit关键字 Ⅰ.再谈构造函数①.构造函数体赋值②.初始化列表赋值【<特性分析>】1.至多性2.特殊成员必在性3.必走性&#xff1a;定义位置4.一致性5.不足性 Ⅱ.explicit关键字①.隐式类型转化②.作用 Ⅰ.再谈…

Spring Cloud Alibaba 集成 sentinel ,sentinel控制台不能检测到服务,但是在命令行配置启动参数就能看到服务

问题背景 Spring Cloud Alibaba 集成 sentinel &#xff0c;sentinel代码写的限流降级的功能都是好的&#xff0c;但是sentinel控制台不能检测到服务&#xff0c;在程序启动时配置JVM启动参数&#xff08;-Dcsp.sentinel.dashboard.serverlocalhost:18080 -Dproject.namename-…

分公司的负责人要如何承担责任

一、分公司的负责人要如何承担责任 1、分公司的负责人不需要承担责任&#xff0c;因为没有法人资格&#xff0c;没有独立的财产权。根据相关法律规定&#xff0c;分公司的债务由总公司承担连带责任&#xff0c;当然可以先由分公司的全部财产承担。 2、法律依据&#xff1a;《…

小白量化《穿云箭集群量化》(9)用指标公式实现miniQMT全自动交易

小白量化《穿云箭集群量化》&#xff08;9&#xff09;用指标公式实现miniQMT全自动交易 在穿云箭量化平台中&#xff0c;支持3中公式源码运行模式&#xff0c;还支持在Python策略中使用仿指标公式源码运行&#xff0c;编写策略。 我们先看如何使用指标公式源码。 #编程_直接使…

【2023秋招】每日一题:P1087-美团3-18真题 + 题目思路 + 所有语言带注释

2023大厂笔试模拟练习网站&#xff08;含题解&#xff09; www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据&#xff0c;挂载到我们的OJ上&#xff0c;供大家学习交流&#xff0c;体会笔试难度。现已录入200道互联网大厂模拟练习题&…

【C生万物】 指针和数组笔试题汇总 (下)

欢迎来到 Claffic 的博客 &#x1f49e;&#x1f49e;&#x1f49e; &#x1f449; 专栏&#xff1a;《C生万物 | 先来学C》&#x1f448; 前言&#xff1a; 承接上文&#xff0c;继续进行指针和数组的练习。 目录 Part2:指针笔试题 1.做题 …

硬件系统工程师宝典(24)-----如何能够正确理解三极管?

各位同学大家好&#xff0c;欢迎继续做客电子工程学习圈&#xff0c;今天我们继续来讲这本书&#xff0c;硬件系统工程师宝典。上篇我们说到不同材质的磁珠&#xff0c;频率阻抗特性不同&#xff0c;根据磁珠的频率阻抗特性曲线&#xff0c;磁珠在低频时电感起作用&#xff0c;…