五月激情久久_黄色国产_狠狠爱网址_av黄色在线观看_日韩a视频_一级少妇女片

欢迎您访问囫囵C语言(三):深入探讨谁调用了main函数及其重要性!

囫囵C语言(三):深入探讨谁调用了main函数及其重要性

更新时间:2025-03-21 15:20:18作者:佚名

谁叫我的主

现在最重要的是要跟上趋势,因此,如果您使用更时尚的单词,谁会触及我的奶酪。谁叫我的主人?但是,作为计算机工作人员,我建议每个人不要遵循趋势。 Java今天很受欢迎,.NET明天很受欢迎,因此请学习任何时尚的东西。我的意思是花几年时间来学习基本技能,当您遵循趋势时,您将能够以一半的努力取得两倍。不再胡说八道。

我们都听到这样的说法:“主要是C语言的入口”。我仍然不明白为什么我这么说。就像有人说:“赚钱正在接女孩,”他一定被无数砖头打了一巴掌。这句话应该是“赚钱是接女孩的条件,但是这种情况尤其重要。”那么上面的句子应该是“主要是C语言中的符号,但此符号非常特别。”

让我们看以下示例:

/ *文件名test00.c */

int main(int argc,char* argv)

返回0;

编译并链接它:

cc test00.c -o test.exe

test.exe将生成

但是我们添加了此选项:-nostdlib(不链接到标准库)

cc test00.c -nostdlib -o test.exe

链接器将报告一个错误:

未定义的符号:__ -start

也就是说:

1。编译器默认值以找到__启动符号,而不是主要的符号

2。符号__ -start是程序的起点

3。主是标准库调用的符号

让我们考虑另一个问题:

当我们编写一个程序(例如模块)时,我们通常需要初始化和去定位,但是为什么有些模块在编写C程序时没有这两个过程?例如,我们的程序可以杂乱无章,没有主机,但我们不会在Main中初始化堆。例如,您可以直接在Main中打印F,但是我们没有打开标准输出文件。 (那些不知道stdin,stdout,stderr和printf和stdout关系的人,请先查看C语言中文件的概念)。

有人说这些事情不需要初始化。如果您真的必须这样想,请不要再读任何内容。我个人认为计算机软件不适合您。

聪明的人会认为他们必须在主要领先之前做过一些事情。直接调用这些功能而无需初始化。通常,我们会在编译器环境中找到一个类似于CRT0.O的名称的文件,该名称包含我们刚才提到的__ -start符号。 (CRT可能是C运行时的缩写,请帮助确认。)

那么,真正的CRT0.S是什么样的?在这里,我们给出一些伪代码:

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

部分.TEXT:

__开始:

init stack;

初始化堆;

开放性stdin;

打开stdout;

开放式stderr;

推动argv;

推动argc;

致电_main; (呼叫主)

贫困堆;

关闭stdin;

关闭stdout;

关闭stderr;

致电__ exit;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

实际上,可能有很多初始化工作,因为它们都与操作系统有关,因此作者不会一个一个列出它们。

注意:

1。不同的编译器不一定具有默认符号__ -start。

2。_组装中的词是C语言中的主要内容,因为汇编器和C编译器具有不同的命名符号(通常是一个下划线'_')。

3。目前,操作系统结构的两个主要分支:微核和麦克罗内尔。微动物的优点是它们具有清晰的结构和简单的结构,较少的内核组件,易于维护;缺点是流程之间存在更多的沟通,程序经常进入和退出内核,并且其效率较低。宏内核恰恰相反。目的是什么:无法确保在用户空间中初始化每个组件(标准库功能)。某些组件可能不会初始化。创建过程时,操作系统在内核空间中进行操作。这取决于操作系统的特定实现。例如,堆,宏内核结构可以在内核中初始化,并且微核结构可以在用户空间中。即使是相同的微核,也可以在内核空间中初始化此东西。

随着CPU技术的发展,存储量的迅速扩展和代码复杂性的增加,微动物越来越多地采用。您会提高代码的复杂性以达到10%的效率吗?您应该知道,CPU速度每18个月将翻一番。因此,我对程序员的要求是,我不希望您的代码先提高效率,并且我希望您的代码能够快速理解和维护80%的人。

总结:

在执行主函数之前,它主要初始化系统相关资源:

1。设置堆栈指针

2。初始化静态和全局变量,即数据段的内容

3。分配非初始化部分的初始值:数字短,int,long等。为0linker是什么意思,bool是错误的,指针为null等,也就是.bss段的内容

4。运行全局构造函数,可能是C ++中类似的构造函数。

5。将主函数参数,argc,argv等传递给主函数,然后实际运行主函数

主要功能之前发生了什么

一些微妙的细节与本文的主题无关。我们不首先关注它。我们只需要知道启动代码是设置矢量表,然后跳到__ Main函数。跳到代码段的特定部分如下:

[c-sharp]查看platercopy

reset_handler procexport reset_handler [弱]导入__ mainldr r0,= __ mainbx r0endp

当您看到__ -Main功能时,估计许多人认为这是主要功能或编译名称的别名,否则与MAIN相关的单词将不再在启动代码中找到。但是事实是贝语网校,__ -Main和Main是完全不同的功能!如果这还不足以让您感到惊讶,请让我告诉您另一个事实:您找不到__框架代码,因为这是由编译器自动创建的!

如果您仍然对此持怀疑态度,则可以检查MDK文档,并找到一个描述:当链接看到Main()的定义时,它将自动创建。简而言之,当编译器发现主函数被定义时,它将自动创建__ -main。

我们基本上已经弄清楚了__ Main功能的起源,所以现在的问题是,这与Main有什么关系?实际上,__Main主要做两件事:初始化C/C ++所需的资源并调用主函数。暂时不会讨论初始化,但是“调用主函数”的功能可以帮助我们解决有关为什么称为__ main的启动代码的疑问,但最后它可以转向主函数。

如果初始化C/C ++所需的资源与特定情况分开,那么很难清楚地解释。让我们首先看一下编译的装配代码段:

linker是什么意思_意思是铃兰花的英文名_意思是灵活而不可捉摸的词语

意思是铃兰花的英文名_linker是什么意思_意思是灵活而不可捉摸的词语

以__RT开头的任何东西都用于初始化C/C ++运行时库;从__ -scatterload开始时,根据离散文件的定义将代码中的变量映射到相应的内存位置。在本文开头回答问题的关键是__ -scatterload_copy函数!

让我们在STM32F10X平台上举一个简单的示例。首先,我们需要了解平台的闪存地址从0x08000000开始,主要是存储代码。当SRAM以0x20000000开头,也就是说,内存。然后C/C ++具有此代码线:

[CPP]查看Platecopy

静态int g_ival = 12;

当我们的程序开始运行时,我们通过IDE发现g_ival映射到内存地址0x20000000,并且该值是一个随机数0xffffbe00,而不是代码中的12个设置,如图所示:

意思是灵活而不可捉摸的词语_linker是什么意思_意思是铃兰花的英文名

我们让程序继续执行。执行__ -scatterload_copy之后,我们发现g_ival已成为我们需要的初始值:

意思是铃兰花的英文名_linker是什么意思_意思是灵活而不可捉摸的词语

接下来是C/C ++库的初始化,最后输入了主函数,此时一切都准备就绪。

如果您仅限于桌面应用程序的开发,因为编译的程序具有许多操作系统功能,它将给我们带来极大的困惑linker是什么意思,以了解该程序的操作。只有进入嵌入式字段并在无需操作系统的支持的情况下,我们才能更好地了解软件的运行方式。只有在这个时候,我们才能更清楚地知道,主要功能不是起点。

最后,如果您想学习C/C ++,则可以向编辑器“ 01”发送私人消息,以获取材料,开发工具和听力权限!

为您推荐

2023年宿城区中等专业学校录取分数线

1.考试方案按《宿迁市2024年初中学业水平考试方案》(宿教发〔2024〕9号)执行。市教育局根据招生计划、生源分布、考生志愿和成绩,测定中心城区普通高中最低控制分数线和中心城区各招生学校录取分数线,报市招生委员会批准。

2025-03-21 20:13

2023年临沂幼师学校录取分数线

一、临沂第一职业幼儿师范中等专业学校专业分数线1、历史教育:录取分数线4622、地理教育:录取分数线469二、临沂第一职业幼儿师范中等专业学校幼师的主要课程三、临沂第一职业幼儿师范中等专业学校幼师专业介绍四、临沂第一职业幼儿师范中等专业学校分数线六、幼师学生报名要求

2025-03-21 15:09

头条文章养成计划:休息与家族相关词汇笔记详解,附牛津柯林斯例句

主要是自己的单词笔记,笔记在文章后面,也可选择先看笔记再看文章。如果还有单词对应的例句,来自牛津或柯林斯。bagel”,不知道是不是也是这个意思呢rejuvenate和refresh是同义词,vt.和vi.皆可descent最常见的意思是下降、斜坡(n.),不过文中是另一意思:血统,出身

2025-03-21 11:14

2023年广州市建筑工程学校录取分数线

广州市普通高中最低录取分数线:545广州市城市建设职业学校办学层次由市土地房产管理职业学校、市市政职业学校、市建筑工程职业学校三校强强联合组建而成,是广东省高水平中职学校建设单位;承接全国提质培优行动计划;是教育部首批1+X证书制度BIM试点院校;广州市城市建设职业学校办学规模

2025-03-21 11:12

使女的故事电视剧引发性别平等思考:All for She项目助力全球女性赋权

那么就让我们一起让有意义的事情变得有意思吧!成为外国志愿者和小朋友们重要的沟通桥梁,参与项目设计,同时收获两种不同的深厚友谊。成为本地志愿者

2025-03-21 09:53

2023年广东省黄埔技工学校录取分数线

广东有哪些中职学校?2023年在广州招生的各类中职学校共89所,其中职业高中11所,全部为公办;中专34所,技工学校44所。热门中职学校的录取分数2023广州中职学校三二分段专业共有16所学校,65个专业是录满的,也说明这些学校专业是比较热门,受到大家的青睐!

2025-03-20 10:08

加载中...
主站蜘蛛池模板: 成年免费视频 | 久久久黄网 | 国产深夜 | 中文字幕不卡一区 | 1204国产成人精品视频下载 | 91久久综合 | 国产精品久免费的黄网站 | 天堂vs亚洲 | 国产成人精品一区二区免费看京 | 91官网在线观看 | 久久久国产精品电影 | а天堂中文最新一区二区三区 | 91精品在线免费观看视频 | 亚洲精品国产视频 | 久久天堂精品 | 中国女人内谢69xxxx | 中文精品久久久 | 91免费观看网站 | 91免费电影 | 成人av一区二区在线观看 | 九九热久久久 | 91精品在线免费视频 | 九九热免费在线视频 | 中文字幕一区二区不卡 | 91视频免费观看 | 91精品久久久久久久久久 | 99国产99| 91欧美一区二区三区 | 久中文字幕 | 国产精品国产一区二区三区四区 | 99精品久久久国产一区二区三 | 天堂一区| 川上优av一区二区线观看 | 亚洲精品国产91 | 国产精品夜夜春夜夜爽久久小 | 九色视频在线观看 | 91传媒在线看 | 91官网视频| 中国女人内谢69xxxx | 99热在线观看精品 | 亚洲欧美一区二区三区三高潮 |