89.【C语言】编译和链接
1.翻译环境和运行环境总述
翻译环境:源代码被转换为机器码(又称为二进制指令)(包含编译和链接两个过程)依赖此环境
运行环境:可执行程序(Windows下的*.exe)到输出结果依赖此环境
2.翻译环境
翻译环境的解释
拆分为预处理(又称为预编译),编译和汇编三个过程
VS下的编译器:cl.exe,VS下的链接器:link.exe
编译器:一个或多个*.c文件(多个c文件会经过编译器的单独处理)-->*.obj(Windows下的目标文件) 链接器:*.obj+链接库-->*.exe
链接库:运行时库(它是支持程序运行的基本函数集合)或者第三方库,例如stdio.h包含了许多库函数
其实在VS2022的项目的目录下可以看到

保护模式下的DOSBox的编译和链接过程
如果有DOSBox的使用经验,便可以轻松理解上述的概念
1.编译1.asm的命令masm 1.asm
会产生三个文件:1.OBJ,NUL.LST,NUL.CRF
2.链接命令link 1;
执行完后会看到生成的两个文件
把编译器展开成3个过程的图
经历的几个过程
预处理(预编译)
源文件和头文件会被处理成为.i 为后缀的文件
1.删除所有的#define,并展开所有的宏定义
2.处理所有的条件编译指令,如: #if,#ifdef,#elif,#else,#endif
3.处理#include预编译指令,将包含的头文件的内容插入到该预编译指令的位置.这个过程是递归进行的,也就是说被包含的头文件也可能包含其他文件
4.删除所有的注释
5.添加行号和文件名标识,方便后续编译器生成调试信息等
6.或保留所有的#pragma的编译器指令,编译器后续会使用
编译
进行词法分析,语法分析,语义分析及优化等操作,生成汇编代码
汇编
汇编器将汇编代码转变成机器可执行的指令
链接
解决一个项目中多文件、多模块之间互相调用的问题
3.运行环境
1. 程序必须载入内存中才能运行
在操作系统的环境(保护模式下)中:由操作系统为程序分配内存
在独立的环境(实模式下)中:程序的载入必须手动安排,也可能是通过可执行代码置入只读内存来完
成(如单片机的下载(也称烧录))
2. 程序的执行的开始:调用main函数
3. 执行程序代码:程序将使用一个运行时堆栈(函数栈帧),存储函数的局部变量和返回地址.程序同时
也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值
由关函数栈帧的详细讲解参见
36.【C语言】函数栈帧的创建和销毁
E40.【C语言】练习:有关栈帧的讨论(反汇编分析)
4. 终止程序:正常终止main函数或意外终止
相关文章:
89.【C语言】编译和链接
1.翻译环境和运行环境总述 翻译环境:源代码被转换为机器码(又称为二进制指令)(包含编译和链接两个过程)依赖此环境 运行环境:可执行程序(Windows下的*.exe)到输出结果依赖此环境 2.翻译环境 翻译环境的解释 拆分为预处理(又称为预编译),编译和汇编三个过程 VS下的编译器:…...
优秀学员统计
题目描述 公司某部门软件教导团正在组织新员工每日打卡学习活动,他们开展这项学习活动已经一个月了,所以想统计下这个月优秀的打卡员工。每个员工会对应一个id,每天的打卡记录记录当天打卡员工的id集合,一共30天。 请你实现代码帮…...
电脑程序变化监控怎么设置?实时监控电脑程序变化的五大方法,手把手教会你!
在现代办公和信息安全领域,实时监控电脑程序变化是一项至关重要的任务。 无论是企业内网安全、员工行为审计,还是个人电脑的隐私保护,了解并设置有效的监控方法都是必不可少的。 本文将详细介绍五种电脑程序变化监控的方法,帮助…...
2.1.3 编码和调制(下)
常用的调制方法 例题: 常用的QAM调制方案: QAM-16 即调制16种信号,1码元携带log2 164 bit数据 QAM-32 即调制32种信号,1码元携带log2 325 bit数据 QAM-64 即调制64种信号,1码元携带log2 646 bit数据 解题过程&…...
【网络安全渗透测试入门】之XSS漏洞检测、利用和防御机制XSS游戏(非常详细)收藏这一篇就够了!
一、前言 这是我给粉丝盆友们整理的网络安全渗透测试入门阶段XSS攻击基础教程。 本教程主要讲解XSS漏洞检测、利用和防御机制。 喜欢的朋友们,记得给我点赞支持和收藏一下,关注我,学习黑客技术。 Web的安全问题越来越严重,漏洞…...
[ComfyUI]Flux:超赞古风少女LORA,唯美江南水乡小桥流水轻舟江南美人
在数字艺术的世界里,ComfyUI的Flux技术再次展现了它的独特魅力。这次,它带来了一个全新的古风少女LORA模型,让用户能够轻松地创作出唯美江南水乡的场景,感受江南的韵味和小桥流水的诗意。 ComfyUI的Flux技术结合了先进的图像处理…...
从蚂蚁金服面试题窥探STW机制
背景 在Java虚拟机(JVM)中,垃圾回收(GC)是一个至关重要的机制,它负责自动管理内存的分配和释放。然而,垃圾回收过程并非没有代价,其中最为显著的一个影响就是STW(Stop-T…...
【MySQL数据库】MySQL高级语句(SQL语句进阶版)
文章目录 SQL语句进阶版MySQL查询数据的过程一、连接与身份验证二、查询缓存(MySQL 8.0之前版本)三、查询解析与优化四、查询执行五、返回结果 MySQL语句准备环境创建 location 表并插入数据创建 store_info 表并插入数据查询示例 语句示例SELECTDISTINC…...
Milvus 到 TiDB 向量迁移实践
作者: caiyfc 原文来源: https://tidb.net/blog/e0035e5e 一、背景 我最近在研究使用向量数据库搭建RAG应用,并且已经使用 Milvus、Llama 3、Ollama、LangChain 搭建完成。最近通过活动获取了 TiDB Cloud Serverless 使用配额ÿ…...
springboot集成jsoup解析xml文件
springboot集成jsoup解析xml文件 1、引入依赖2、xml转成需要的map结构3、测试数据 1、引入依赖 <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.16.2</version></dependency>2、xml转成需…...
基于Springboot相亲网站系统的设计与实现
基于 Springboot相亲网站系统的设计与实现 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:idea 源码获取:https…...
解决提示”warning C317 attempt to redefine macro ‘XX‘“问题
今天来分享一个之前在开发时候遇到的一个告警,是一个关于不正当使用宏定义产生的告警。 先看告警提示:warning C317: attempt to redefine macro ‘WIFI_UART_SEND_BUF’; 意思是该宏定义存在重新定义; 而为什么编译器会这样提示…...
3D图片动画效果组件封装
1.效果 3D图片动画效果 2.组件部分 import "./index.less"/*** 3D图片动画效果* pictures: 图片数组[封面,英雄,标题]*/ export const Picture3D (props: any) > {console.log("3D图片动画效果", props)return <divclassNamepicture3DonClick{prop…...
高级优化算法之 fminunc函数 实践
说明 在本专栏机器学习_墨#≯的博客-CSDN博客前面几篇文章中,大多采用梯度下降法来求解。其实还有很多的高级优化算法可以用来求解回归和分类问题,本文就是在吴恩达机器学习视频课程[1]的启示下,想要简单尝试一下Matlab自带的无约束多变量函数…...
1.5 ROS架构
到目前为止,我们已经安装了ROS,运行了ROS中内置的小乌龟案例,并且也编写了ROS小程序,对ROS也有了一个大概的认知,当然这个认知可能还是比较模糊并不清晰的,接下来,我们要从宏观上来介绍一下ROS的…...
Redis Search系列 - 第四讲 支持中文
目录 一、支持中文二、自定义中文词典2.1 Redis Search设置FRISOINI参数2.2 friso.ini文件相关配置1)自定义friso UTF-8字典2)修改friso.ini配置文件 三、实测中文分词效果 一、支持中文 Redis Stack 从版本 0.99.0 开始支持中文文档的添加和分词。中文…...
架构师备考-架构图设计案列
本文中所涉及的架构图主要参考软考-架构设计师历年Web 架构设计案例真题,在其基础上进行补充说明。 历年软考架构师案例题-Web架构设计考点 2014 MVC 架构2015、2016 J2EE 架构2017 经典网络架构2018 SOA 架构2019 分布式架构2020 SSM 架构2021 云平台架构2022 物…...
专业级Facebook直播工具推荐:提升你的直播体验
随着社交媒体的迅速发展,直播已成为现代内容传播的重要方式。Facebook作为全球最大的社交平台之一,为用户和企业提供了丰富的直播功能,吸引了众多观众和参与者。在这个竞争激烈的环境中,如何打造高质量的直播内容显得尤为重要。本…...
【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (三):Cors的设置及.env文件的设置
本项目旨在学习如何快速使用 nodejs 开发后端api,并为以后开展其他项目的开启提供简易的后端模版。(非后端工程师) 由于文档是代码写完之后,为了记录项目中需要注意的技术点,因此文档的叙述方式并非开发顺序࿰…...
[python flask 数据库ORM操作]
一、链接数据库 我们选择的框架是flask-sqlAlchemy 这个框架是对pymysql的封装。 连接数据库 #导入包 from flask_sqlalchemy import SQLAlchemy #创建flask app对象 app Flask(__name__) #设置配置信息 HOSTNAME "localhost" PORT 3306; USERNAME "root&…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...



