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

程序环境和预处理、编译链接过程、编译的几个阶段、运行环境、预定义符号等的介绍

文章目录

  • 前言
  • 一、程序的翻译环境和执行环境
  • 二、编译链接过程
  • 三、编译的几个阶段
  • 四、运行环境
  • 五、预定义符号
  • 总结


前言

程序环境和预处理、编译链接过程、编译的几个阶段、运行环境、预定义符号的介绍。


一、程序的翻译环境和执行环境

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

  1. 第 1 种 是翻译环境,在这个环境中源代码被转换为可执行的机器指令。
  2. 第 2 种 是执行环境, 它用于实际执行代码。

二、编译链接过程

  • 每一个源文件(test.c),编译器都会单独处理,生成一个目标文件(test.obj)
  • 不同编译器文件后缀不同,Linux环境 gcc 编译器生成目标文件 是 test.o文件

在这里插入图片描述

三、编译的几个阶段

  • 编译可以分为三个阶段
  • 预编译
  • 编译
  • 汇编

编译阶段的符号汇总是汇总全局变量和函数。
在这里插入图片描述

四、运行环境

程序执行的过程:

  1. 程序必须载入内存中,在有操作系统的环境中:一般这个由操作系统完成,在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。
  2. 程序的执行开始,调用main函数
  3. 开始执行后,程序将使用一个运行时堆栈,存储函数的局部变量和返回地址,程序同时也可以使用静态内存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。
  4. 终止程序,正常终止main函数;也有可能是意外终止。

五、预定义符号

  • 这些预定义符号都是语言内置
  • 这些预定义符号可以用来写日志
    在这里插入图片描述
#include <stdio.h>
int main()
{FILE* pf = fopen("log.txt", "w");if (NULL == pf){perror("fopen");}int i = 0;for (i = 0; i < 10; i++){fprintf(pf, "file:%s  line=%d  date:%s  time:%s\n", __FILE__, __LINE__, __DATE__, __TIME__);}fclose(pf);pf = NULL;return 0;
}

在这里插入图片描述


总结

程序环境和预处理、编译链接过程、编译的几个阶段、运行环境、预定义符号的介绍。

相关文章:

程序环境和预处理、编译链接过程、编译的几个阶段、运行环境、预定义符号等的介绍

文章目录 前言一、程序的翻译环境和执行环境二、编译链接过程三、编译的几个阶段四、运行环境五、预定义符号总结 前言 程序环境和预处理、编译链接过程、编译的几个阶段、运行环境、预定义符号的介绍。 一、程序的翻译环境和执行环境 在 ANSI C 的任何一种实现中&#xff0c…...

MySQL导入导出详细教程

导出 语法 mysqldump [OPTIONS] database [tables] mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] mysqldump [OPTIONS] --all-databases [OPTIONS]导出所有数据库 mysqldump -uroot -proot --all-databases >/tmp/all.sql导出db1、db2两个数据库的所有数…...

STM32F103学习笔记 | 8. 二,八,十,十六进制表示方式

文章目录 进制基本信息参考文献 进制基本信息 C语言中的表示&#xff0c;前缀加0表示八进制数&#xff0c;前缀加0x表示十六进制数 基数数码名称描述代码和书本中的表示举例20 和 1二进制逢二进一&#xff0c;几乎所有的电子计算机内部都使用二进位制&#xff0c;分别为“0”…...

ROS2 工作空间

文章目录 ROS2 工作空间创建工作空间自动安装依赖编译工作空间设置环境变量参考链接 ROS2 工作空间 工作空间可以简单理解为工程目录。 ROS 系统中一个典型的工作空间结构如图所示&#xff1a; dev_ws&#xff1a; 根目录&#xff0c;里面会有四个子目录&#xff08;子空间&a…...

基于CCS5.5的双音多频(DTMF)信号检测仿真实验(①检测型音频文件②输入生成音频并检测)

DTMF的优点 我们知道,DTMF根本上仍然是频谱分析,基础还是DFT,但DFT通常需要对一整段数据做变换,而DTMF不同,每输入一个采样点就计算一次,更有利于硬件实现。 基于CCS的双音多频(DTMF)信号检测原理 公式详细推导 详细的公式推导在下面这篇博客中已经进行了详细的描述,…...

Postgresql中JIT函数能否inline的依据function_inlinable

相关 《Postgresql源码&#xff08;128&#xff09;深入分析JIT中的函数内联llvm_inline》 《LLVM的ThinLTO编译优化技术在Postgresql中的应用》 前置阅读&#xff1a;《Postgresql源码&#xff08;128&#xff09;深入分析JIT中的函数内联llvm_inline》 在JIT inline函数的过…...

存储过程作为初始化数据例子

查询出每个人员&#xff0c;为每个人员插入11条数据&#xff0c;作为初始化数据 oracle存储过程 CREATE OR REPLACE PROCEDURE initialize_order_warn_config ISv_id NUMBER; BEGINSELECT COALESCE(MAX(id), 0) INTO v_id FROM order_warn_config;FOR rec IN (SELECT DISTINCT…...

【数据分析】 JupyterNotebook安装及使用简介

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 在数据分析中&#xff0c;一般用Pycharm编辑代…...

nginx命令大全

以下是Nginx的一些常用命令&#xff0c;适用于Linux环境&#xff0c;部分命令在Windows系统下也适用&#xff0c;但命令形式可能有所不同&#xff1a; 查看Nginx版本号: nginx -v&#xff1a;简短显示版本号。nginx -V&#xff1a;详细显示版本号及编译配置信息。 启动Nginx…...

【数据结构】顺序表与链表的差异

顺序表和链表都是线性表&#xff0c;它们有着相似的部分&#xff0c;但是同时也有着很大的差异。 存储空间上的差异&#xff1a; 对于插入上的不同点&#xff0c;顺序表在空间不够时需要扩容&#xff0c;而如果在使用realloc函数去扩容&#xff0c;会有原地扩容和异地扩容两种情…...

小程序如何进行评分评价

小程序以其便捷、快速、无需安装的特点&#xff0c;成为了众多企业、品牌与消费者之间的重要连接桥梁。而评价评分机制&#xff0c;作为小程序中不可或缺的一环&#xff0c;对于提升用户体验、建立用户信任、促进商家与用户的互动等方面&#xff0c;都具有至关重要的意义。本文…...

【MATLAB源码-第206期】基于matlab的差分进化算法(DE)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 差分进化算法&#xff08;Differential Evolution, DE&#xff09;是一种有效的实数编码的进化算法&#xff0c;主要用于解决实值函数的全局优化问题。本文将详细介绍差分进化算法的背景、原理、操作步骤、参数选择以及实际应…...

Python图形界面(GUI)Tkinter笔记(三):控件的定位(1)

Tkinter(GUI)设计图形界面时有三种控件的包装方法去定位各控件在窗口(父容器、根窗口)上的位置。 【1】pack()方法:用方位来定位位置,类似于Word文档中的文字对齐方式。 【2】grid()方法:用二维表格式的坐标值定位,类似于EXCEL单位元。 【3】place()方法:用窗口的像…...

数据结构--单链表 详解(附代码

目录&#xff1a; 1&#xff1a;链表的概念及结构 2&#xff1a;实现单链表 3&#xff1a;常见疑问 解答 &#xff08;看到最后&#xff01;&#xff01;&#xff09; 一&#xff1a;链表的概念及结构 1.1 概念&#xff1a; 链表是⼀种 物理存储结构上非连续、非顺序的 存储结…...

leetcode 1749.任意子数组和的绝对值的最大值

思路&#xff1a;dp 说到绝对值&#xff0c;大家肯定不陌生&#xff0c;但是用在dp上就会使问题变得稍微复杂一些了。 我们在最大子数组和的那道题中知道&#xff0c;在状态转移的时候&#xff0c;我们会舍弃掉为负数的连续部分&#xff0c;重新构建连续的子串。但是&#xf…...

Linux进程——进程地址空间

前言&#xff1a;在讲完环境变量后&#xff0c;相信大家对Linux有更进一步的认识&#xff0c;而Linux进程概念到这也快接近尾声了&#xff0c;现在我们了解Linux进程中的地址空间&#xff01; 本篇主要内容&#xff1a; 了解程序地址空间 理解进程地址空间 探究页表和虚拟地址空…...

基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (三)

基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 大家继续看 https://lilianweng.github.io/posts/2023-06-23-agent/的文档内容 第二部分&#xff1a;内存 记忆的类型 记忆可以定义为用于获取、存储、保留以及随后检索信息的过程。人脑中有多…...

python3如何安装bs4

在python官网找到beautifulsoup模块的下载页面&#xff0c;点击"downloap"将该模块的安装包下载到本地。 将该安装包解压&#xff0c;然后在打开cmd&#xff0c;并通过cmd进入到该安装包解压后的文件夹目录下。 在该文件目录下输入"python install setup.py&quo…...

docker容器技术篇:rancher管理平台部署kubernetes集群

rancher管理平台部署kubernetes集群 Rancher 是一个 Kubernetes 管理工具&#xff0c;让你能在任何地方和任何提供商上部署和运行集群。 Rancher 可以创建来自 Kubernetes 托管服务提供商的集群&#xff0c;创建节点并安装 Kubernetes&#xff0c;或者导入在任何地方运行的现…...

【计算机网络原理】初识网络原理和一些名词解释​​

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…...

3步解决Windows驱动臃肿难题:DriverStore Explorer让系统空间释放效率提升80%

3步解决Windows驱动臃肿难题&#xff1a;DriverStore Explorer让系统空间释放效率提升80% 【免费下载链接】DriverStoreExplorer Driver Store Explorer [RAPR] 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 诊断系统存储异常 "为什么我的C盘…...

粒子追踪模拟单透镜聚焦comsol ansys Fluent 二维三维模型 仿真模型,文献复现

粒子追踪模拟单透镜聚焦comsol ansys Fluent 二维三维模型 仿真模型&#xff0c;文献复现&#xff0c;热湿传递在实验室折腾粒子追踪仿真的时候&#xff0c;最让人上头的莫过于单透镜聚焦的场景搭建。COMSOL和ANSYS这对冤家各有各的脾气——前者把物理场耦合玩出花&#xff0…...

Sodaq_RN2483库详解:LoRaWAN Class A终端嵌入式实现

1. Sodaq_RN2483库深度解析&#xff1a;面向Class A LoRaWAN终端的嵌入式通信实现 1.1 库定位与工程价值 Sodaq_RN2483是一个专为Microchip RN2483 LoRaWAN模块设计的Arduino兼容C库&#xff0c;其核心目标是为资源受限的嵌入式系统提供稳定、可复用、符合LoRaWAN协议规范的无…...

Python AI 用例工具部署踩坑实录:Docker镜像体积暴增300%、GPU显存泄漏、模型热加载失败的5个根因与秒级修复方案

第一章&#xff1a;Python AI 用例工具部署的典型失败图谱在真实生产环境中&#xff0c;Python AI 工具链&#xff08;如 LangChain、LlamaIndex、FastAPI 封装的推理服务&#xff09;的部署失败往往并非源于模型能力缺陷&#xff0c;而是由基础设施、依赖冲突与配置漂移引发的…...

法律文书助手:OpenClaw+Qwen3-32B的合同条款审查与风险提示

法律文书助手&#xff1a;OpenClawQwen3-32B的合同条款审查与风险提示 1. 为什么需要本地化的法律文书助手&#xff1f; 去年处理一份股权投资协议时&#xff0c;我经历了传统法律AI工具的典型痛点&#xff1a;上传合同到第三方平台后&#xff0c;法务团队突然发现协议中涉及…...

java rabbitmq实现消息协作

场景&#xff1a;数据下载采用rpa实现&#xff0c;数据服务采用java springboot实现&#xff0c;需要进行一键数据补录操作1、设置消息承载的通信队列&#xff0c;java 发送任务到rabbitmq和rpa端收到消息&#xff08;neimeng_data_download&#xff09;后&#xff0c;将下载结…...

像素幻梦工坊实战落地:数字艺术教育机构像素创作课AI教具部署

像素幻梦工坊实战落地&#xff1a;数字艺术教育机构像素创作课AI教具部署 1. 项目背景与教育价值 在数字艺术教育领域&#xff0c;像素艺术作为入门门槛较低但创意空间广阔的艺术形式&#xff0c;正受到越来越多教育机构的青睐。然而传统像素艺术教学面临两大挑战&#xff1a…...

精读《Harness design for long-running application development》:真正拉开差距的,不是模型本身,而是你怎么给它harness

精读《Harness design for long-running application development》&#xff1a;真正拉开差距的&#xff0c;不是模型本身&#xff0c;而是你怎么给它搭脚手架 原文&#xff1a;Harness design for long-running application development Anthropic 这篇文章最值得读的地方&a…...

Ubuntu 20.04 LTS下FinalShell安装全攻略(附一键脚本及常见问题解决)

Ubuntu 20.04 LTS下FinalShell终极配置指南&#xff1a;从安装到高阶应用 为什么开发者需要FinalShell&#xff1f; 作为一名长期使用Ubuntu进行远程服务器管理的开发者&#xff0c;我深知一款优秀的SSH工具对工作效率的影响。FinalShell作为跨平台的国产SSH工具&#xff0c;…...

三步解锁QQ空间历史说说备份:数据留存与管理实用指南

三步解锁QQ空间历史说说备份&#xff1a;数据留存与管理实用指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory QQ空间数据备份是许多用户保存青春记忆和重要记录的需求。GetQzonehist…...