当前位置: 首页 > news >正文

阿里巴巴网页版登录入口/百度seo新规则

阿里巴巴网页版登录入口,百度seo新规则,源码网站,那些做seo的网站【C语言进阶篇】编译和链接 🥕个人主页:开敲🍉 🔥所属专栏:C语言🍓 🌼文章目录🌼 编译环境与运行环境 1. 翻译环境 2. 编译环境:预编译(预处理)编…

【C语言进阶篇】编译和链接

🥕个人主页:开敲🍉

🔥所属专栏:C语言🍓

🌼文章目录🌼

编译环境与运行环境

  1. 翻译环境

  2. 编译环境:预编译(预处理)+编译+汇编+链接

      2.1 预处理(预编译)

    2.2 编译

       2.2.1 词法分析

       2.2.2 语法分析

       2.2.3 语义分析

  2.3 汇编

  2.4 链接

3. 运行环境

编译环境与运行环境

  在ANSIC的任何一种实现中,存在两个不同的环境。

  1. 翻译环境

  那么翻译环境是怎么将源代码转换城可执行的机器指令的呢?这里我们就得展开讲讲翻译环境所做的事情。

  其实翻译环境是由编译链接两个大的过程组成的,而编译由可以分解成:预处理(预编译)、编译、汇编三个过程。

  一个C语言程序的项目中可能有多个.c文件一起构建,那多个.c文件如何生成可执行程序呢?

    多个.c文件单独经过编译器,编译处理生成对应的目标文件。

  ② 注:在windows环境下的目标文件的后缀是.obj,Linux环境下目标文件的后缀是.o

  ③ 多个目标文件和链接库一起经过链接器处理生成最终的可执行程序。

  ④ 链接库是指运行时库(它是支持程序运行的基本函数集合)或者第三方库。

  如果再把编译器展开成3个过程,那就变成了下面的过程:

  2. 编译环境:预编译(预处理)+编译+汇编+链接

      2.1 预处理(预编译)

  在预处理阶段,源文件和头文件会被处理为.i为后缀的文件。

  在gcc环境下想观察一下,对text.c文件预处理后的.i文件,命令如下:

1  gcc -E  test.c  -o  test.i

  预处理阶段主要处理那些源文件中#开始的预编译指令。比如:#include #define,处理的规则如下:

  ①  将所有的#define删除,并展开所有的宏定义。

  ②  处理所有的条件编译指令,如:#if、#iddef、#elif、#else、#endif。

  ③  处理#include预编译指令,将包含的头文件的内容插入到该预编译指令的位置。这个过程是递归进行的。也就是说被包含的头文件也可能包含其他头文件。注:#define的包含不属于递归

  ④  删除所有的注释(这也就说明注释不是给机器看的,而是给程序员看的)

  ⑤  添加行号和文件名标识,方便后续编译器生成调试信息等。

  ⑥  或保留所有的#pragma的编译器指令,编译器后续会使用

  经过预处理后的.i文件不再包含宏定义,因为宏已经被展开。并且包含的头文件被插入到.i文件中。所以当我们无法知道宏定义或者头文件是否包含正确的时候,可以查看预处理后的.i文件来确认。

    2.2 编译

  编译过程就是将预处理后的文件进行一系列的:词法分析语法分析语义分析及优化,生成相应的汇编代码如下:

1  gcc  -S  text.i  -o  test.s

  对下面的代码进行编译的时候,会怎么做呢?假设有下面代码

arry[index] = (index+4)*(2+6)

       2.2.1 词法分析

  将源代码程序被输入扫描器,扫描器的任务就是简单的进行词法分析,把代码中的字符分割成一系列的记号(关键字、标识符、字面量、特殊字符等)。

  上面的程序进行词法分析后得到了16个记号:

       2.2.2 语法分析

  然后是语法分析器,将对扫描产生的记号进行语法分析,从而产生语法树。这些语法树是以表达式为节点的树。

       2.2.3 语义分析

  由语义分析器来完成语义分析,即对表达式的语法层面分析。编译器所能做的分析是语义的静态分析。静态语义分析通常包括声明和类型的匹配,类型的转换等。这个阶段会报告的错误语法信息。

  2.3 汇编

  汇编器是将汇编代码转变成机器的可执行指令,每一个汇编语句几乎都对应一条机器指令。就是根据汇编指令和机器指令的对照表一一的进行编译,也不做指令优化。

汇编的命令如下:

1  gcc  -c  test.s  -o  test.o

  2.4 链接

   链接是一个复杂的过程,链接的时候需要把一堆文件链接在一起才能生成可执行程序。

 ②  链接过程主要包括:地址和空间分配,符号决议和重定位等这些步骤。

 ③  链接解决的是一个项目中多文件、多模块之间互相调用的问题。

  比如:

在一个C的项目中有2个.c文件(text.cadd.c),代码如下:

我们知道,每个源文件都是单独经过编译器处理生成对应的目标文件。

  test.c经过编译器处test.o

  add.c经过编译器处理生成add.o

  我们在test.c的文件中使用了add.c文件中的Add函数和g_val变量。

  我们在test.c文件中每一次使用Add函数和g_val的时候必须确切的知道Add和g_val的地址,但是由于每个文件是单独编译的,在编译器test.c的时候并不知道Add函数和g_val变量的地址,所以暂时把调用的Add的指令的目标地址目标地址和g_val的地址搁置。等待最后链接的时候由链接器根据引用的符号Add在其他模块中查找Add函数的地址,然后将test.c中所有引用到Add的指令重新修正,让他们的目标地址为真正的Add函数地址,对于全局变量g_val也是类似的方法来修正地址。这个地址修正的过程也被叫做:重定义。

  前面我们非常简洁的讲解了一个C的程序是如何编译和链接,到最终生成可执行程序的过程,其实很多内部的细节无法展开讲解。比如:目标文件的格式elf,链接底层实现中的空间与地址分配,符号解析和重定位等,如果你有兴趣,可以看《程序员的自我修养》——书来详细了解。

3. 运行环境

  ①  程序必须载入内存中。也有操作系统的环境中:一般这个由操作系统完成。在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。

  ②  程序的执行便开始。接着便调用main函数。

  ③  开始执行程序代码。这个时候程序将使用一个运行时堆栈(stack),存储函数的局部变量和返回地址。程序同时也可以使用静态(staic)内存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。

  ④  终止程序。正常终止main函数;也有可能意外终止。

                                              创作不易,点个赞呗,蟹蟹啦~

相关文章:

【C语言进阶篇】编译和链接

【C语言进阶篇】编译和链接 🥕个人主页:开敲🍉 🔥所属专栏:C语言🍓 🌼文章目录🌼 编译环境与运行环境 1. 翻译环境 2. 编译环境:预编译(预处理)编…...

pytorch+tensorboard

安装依赖 pip install teorboard pip install torch_tb_profiler了解teorboard 记录并可视化标量[组]、图片[组]。 如何使用 第一步:构建模型,记录中间值,写入summarywriter 每次写入一个标量add_scalar 比如: from torch.utils.tensorboard import SummaryWriter wr…...

PTA------ 敲笨钟

字符串处理问题&#xff01;------->字符串处理相关操做 代码&#xff1a; #include <iostream> #include<algorithm> #include<cmath> #include<cstring> #include<set> #include<stack> #include<queue> #include<map>…...

关于HashSet的五个问题

1.HashSet集合的底层数据结构是什么样的? HashSet 集合的底层数据结构是哈希表&#xff0c;它是由一个数组和链表&#xff08;或红黑树&#xff0c;具体取决于 JDK 版本&#xff09;组成的数据结构。 数组&#xff1a;哈希表的主要部分是一个数组&#xff0c;它的每个位置称为…...

linux性能调优汇总(一)cpu

目录 一、引言 二、CPU ------>2.1、/proc/cpuinfo ------>2.2、cpuid指令 ------>2.3、lscpu ------>2.4、turbostat ------>2.5、rdmsr ------>2.6、perf ------>2.7、top ------>2.8、ps ------>2.9、pidstat 查看每个进程CPU、内存、…...

CSS object-fit 属性

object-fit 属性指定元素的内容应该如何去适应指定容器的高度与宽度。 object-fit 一般用于 img 和 video 标签&#xff0c;一般可以对这些元素进行保留原始比例的剪切、缩放或者直接进行拉伸等。 您可以通过使用 object-position 属性来切换被替换元素的内容对象在元素框内的…...

使用LangChain LCEL生成RAG应用、使用LangChain TruLens对抗RAG幻觉

# 导入LangChain的库 from langchain import *# 加载数据源 loader WebBaseLoader() doc loader.load("https://xxx.html")# 分割文档对象 splitter RecursiveCharacterTextSplitter(max_length512) docs splitter.split(doc)# 转换文档对象为嵌入&#xff0c;并…...

npm淘宝镜像源更新

目录 前情提要&#xff1a; 背景&#xff1a; 镜像源更新&#xff1a; 清楚缓存&#xff1a; 直接切换镜像源&#xff1a; 补充&#xff1a; 错误解释&#xff1a; 解决方法&#xff1a; 前情提要&#xff1a; 2024 /1 /22 &#xff0c;registry.npm.taobao.org淘宝镜像源的SSL…...

Navicat 干货 | 探索 PostgreSQL 的外部数据包装器和统计函数

PostgreSQL 因其稳定性和可扩展性而广受青睐&#xff0c;为开发人员和数据管理员提供了许多有用的函数。在这些函数中&#xff0c;file_fdw_handler、file_fdw_validator、pg_stat_statements、pg_stat_statements_info 以及 pg_stat_statements_reset 是其中的重要函数&#x…...

耳目一新的滑块版登录注册界面~

又到了毕业季&#xff0c;大家做毕设的时候总会参考已有的案例&#xff0c;不过大多产品的样式非常单一雷同。本帖博主给大家分享一个比较别树一帜的登录界面&#xff0c;如下&#xff1a; 如果没有账号&#xff0c;点击“去注册”&#xff0c;则会产生如下的效果&#xff1a; …...

分布式系统的发展史

目录 &#x1f433;今日良言&#xff1a;且视他人之疑目如盏盏鬼火&#xff0c;大胆地去走自己的夜路 &#x1f407;一、常见概念 &#x1f407;二、发展史 今日良言&#xff1a;且视他人之疑目如盏盏鬼火&#xff0c;大胆地去走自己的夜路 一、常见概念 在正式介绍分布式系…...

2024年腾讯云服务器最新价格表,CPU内存带宽系统盘报价

腾讯云服务器价格表2024年最新价格&#xff0c;轻量2核2G3M服务器61元一年、2核2G4M服务器99元1年&#xff0c;三年560元、2核4G5M服务器165元一年、3年900元、轻量4核8M12M服务器646元15个月、4核16G10M配置32元1个月、8核32G配置115元1个月&#xff0c;345元3个月。CVM云服务…...

深入解析Oracle数据库ORA-01427错误:单行子查询返回多行的问题与解决办法

深入解析Oracle数据库ORA-01427错误&#xff1a;单行子查询返回多行的问题与解决办法 1、引言2、错误描述3、常见场景与示例4、解决方案5、声明 1、引言 在Oracle数据库日常运维与开发过程中&#xff0c;经常会遇到ORA-01427错误&#xff0c;这是一个很典型的数据库错误提示&am…...

【正点原子FreeRTOS学习笔记】————(12)信号量

这里写目录标题 一、信号量的简介&#xff08;了解&#xff09;二、二值信号量&#xff08;熟悉&#xff09;三、二值信号量实验&#xff08;掌握&#xff09;四、计数型信号量&#xff08;熟悉&#xff09;五、计数型信号量实验&#xff08;掌握&#xff09;六、优先级翻转简介…...

【数据分享】1929-2023年全球站点的逐年平均露点(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2023年全球气象站…...

PHP+MySQL开发组合:智慧同城便民信息小程序源码系统 带完整的安装代码包以及安装部署教程

当前&#xff0c;城市生活的节奏日益加快&#xff0c;人们对各类便民信息的需求也愈发迫切。无论是寻找家政服务、二手交易&#xff0c;还是发布租房、求职信息&#xff0c;一个高效、便捷的信息平台显得尤为重要。传统的信息发布方式往往存在信息更新不及时、查找困难等问题&a…...

Linux相关命令(1)

1、找出文件夹下包含 “aaa” 同时不包含 “bbb”的文件&#xff0c;然后把他们重新生成一下。要求只能用一行命令。 find ./ -type f -name "*aaa*" ! -name "*bbb*" -exec touch {} \;文件系统操作命令 df&#xff1a;列出文件系统的整体磁盘使用情况 …...

NO9 蓝桥杯单片机实践之串口通信的使用

1 回顾 串口通信的代码编写结构还是与中断一样&#xff0c;不同的是&#xff1a; 初始中断函数条件涉及到串口通信相关的寄存器和定时器1相关的寄存器&#xff08;定时器1用于产生波特率&#xff09;&#xff0c;但初始条件中的中断寄存器只考虑串口通信而不考虑定时器1。 vo…...

数据库管理-第163期 19c重建ADG的两个方法(20240323

数据库管理163期 2024-03-23 数据库管理-第163期 19c重建ADG的两个方法&#xff08;20240323&#xff09;1 ORA-081032 新办法1 关闭MRP2 恢复备库3 其他操作4 启动备库5 启动MRP 3 老办法4 预告总结 数据库管理-第163期 19c重建ADG的两个方法&#xff08;20240323&#xff09;…...

8款常见的自动化测试开源框架

在如今开源的时代&#xff0c;我们就不要再闭门造车了&#xff0c;热烈的拥抱开源吧&#xff01;本文针对性能测试、Web UI 测试、API 测试、数据库测试、接口测试、单元测试等方面&#xff0c;为大家整理了github或码云上优秀的自动化测试开源项目&#xff0c;希望能给大家带来…...

【QT】:基本框架

基本框架 一.创建程序二.初识函数1.main2.Widget.h3.Wight.cpp4.Wight.ui5.文件名.pro 三.生成的中间文件 本系列的Qt均使用Qt Creator进行程序编写。 一.创建程序 二.初识函数 1.main 2.Widget.h 3.Wight.cpp 4.Wight.ui 此时再点击编辑&#xff0c;就看到了ui文件的本体了。…...

【Python】定时更换clashx工具

An empty street An empty house A hole inside my heart I’m all alone The rooms are getting smaller I wonder how I wonder why I wonder where they are The days we had The songs we sang together Oh yeah And oh, my love I’m holding on forever Reaching for a l…...

2024年第16届大广赛新命题发布-爱华仕箱包

2024年3月27日&#xff0c;2024年第16届大广赛发布了新的命题&#xff0c;爱华仕箱包命题&#xff0c;自2017年起&#xff0c;爱华仕箱包已连续8年担任全国大学生广告艺术大赛命题单位。 爱华仕现已实现百货、超市、电商、礼品、投标、海外市场6大零售网络的全覆盖&#xff0c…...

前端理论总结(js)——闭包和内存泄漏

闭包 什么是闭包&#xff1f; 函数内部和函数外部连接起来的桥梁&#xff0c;可以在一个内层函数中访问到其外层函数的作用域 为什么要用 封装变量 收敛权限 临时变量持久化 优点 1.保护函数内的变量安全      2.在内存中维持一个变量(用的太多就变成了缺点&#xff0c…...

PHP页面如何实现设置独立访问密码

PHP网页如果需要查看信息必须输入密码&#xff0c;验证后才可显示出内容的代码如何实现&#xff1f; 对某些php页面设置单独的访问密码,如果密码不正确则无法查看内容,相当于对页面进行了一个加密。 如何实现这个效果&#xff0c;详细教程可以参考&#xff1a;PHP页面如何实现…...

M1 mac安装 Parallels Desktop 18 激活

M1 mac安装 Parallels Desktop 18 激活 下载安装Parallels Desktop 18.1.1 (53328) 激活1. 拷贝prl_disp_service2. 在终端打开Crack所在位置3. 输入命令&#xff0c;激活成功 下载 安装包和激活文件下载地址 链接: https://pan.baidu.com/s/1EjT7xeEDcntIIoOvvhBDfg?pwd9pue …...

嵌入式学习46——硬件相关2串口通信

串口&#xff1a; 端口&#xff1a; COM 波特率&#xff1a; 9600 115200 &#xff08;bps&#xff09; 每秒传输的数据…...

企业产品网络安全建设日志3月20

今天主要以下几个事情 确定了OCI当前情况下&#xff0c;更新某安全配置会导致链接中断 这问题说大不大&#xff0c;说小不小。 由此引申出各云服务器产品的完善度&#xff1a; AWS&#xff1e;OCI&#xff1e;其他 国内一些安全公司提供的WAF功能&#xff0c;缺点在于其全球的…...

BRICK POP展示了有趣的链上游戏玩法与奖励

新游戏BRICK POP将Sui区块链技术与低Gas费用&#xff0c;以及我们在Web3游戏开发方面的专业知识无缝结合。通过充分利用Sui和我们自己的INNO平台的优势&#xff0c;BRICK POP为玩家提供了一个融合了前沿技术和引人入胜游戏的沉浸式游戏体验。BRICK POP游戏设计为实时交易和高用…...

jetcache 2级缓存模式实现批量清除

需求 希望能够实现清理指定对象缓存的方法&#xff0c;例如缓存了User表&#xff0c;当User表巨大时&#xff0c;通过id全量去清理不现实&#xff0c;耗费资源也巨大。因此需要能够支持清理指定本地和远程缓存的批量方法。 分析 查看jetcache生成的cache接口&#xff0c;并没…...