当前位置: 首页 > 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 如…...

AI代理工具化新范式:基于MCP协议的模块化连接器实践

1. 项目概述&#xff1a;一个面向AI代理的模块化连接器最近在折腾AI应用开发&#xff0c;特别是围绕AI Agent&#xff08;智能体&#xff09;的生态构建时&#xff0c;发现一个挺普遍的问题&#xff1a;如何让这些Agent高效、安全地连接和使用外部工具与服务&#xff1f;无论是…...

搜搜果:一种面向AI生成内容验真与品牌可见度监测的实现方案

1. 问题定义 随着大语言模型&#xff08;LLM&#xff09;广泛集成到搜索、问答、推荐等场景中&#xff0c;出现两个可观测的问题&#xff1a; 内容可信性问题&#xff1a;模型会以高置信度输出事实上不存在的实体、事件或引用&#xff08;幻觉&#xff0c;hallucination&#…...

C++ 时间戳实战:从GetTickCount64到std::chrono的跨平台精度选择

1. 为什么我们需要精确的时间戳&#xff1f; 在开发高性能应用时&#xff0c;时间戳的精度往往决定了程序的可靠性。想象一下&#xff0c;你在开发一个在线游戏服务器&#xff0c;玩家A声称自己先击中了玩家B&#xff0c;但服务器记录的两次命中时间差只有几毫秒。如果使用秒级…...

3分钟掌握B站缓存视频转换:m4s-converter终极使用指南

3分钟掌握B站缓存视频转换&#xff1a;m4s-converter终极使用指南 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这样的困扰&a…...

3分钟掌握Windows与Office智能激活:KMS_VL_ALL_AIO终极解决方案

3分钟掌握Windows与Office智能激活&#xff1a;KMS_VL_ALL_AIO终极解决方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows和Office的激活问题烦恼吗&#xff1f;KMS_VL_ALL_AIO作…...

5分钟免费解锁iPhone激活锁:applera1n实用指南

5分钟免费解锁iPhone激活锁&#xff1a;applera1n实用指南 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 面对二手iPhone的激活锁界面&#xff0c;你是否感到束手无策&#xff1f;applera1n是一款专为…...

为什么92%的AI创作者不敢打印自己的Midjourney作品?揭秘树莓派印相避坑指南,含色彩管理ICC配置包(限免72小时)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;为什么92%的AI创作者不敢打印自己的Midjourney作品&#xff1f; 当一张由 Midjourney 生成的「超写实森林神殿」在屏幕上熠熠生辉时&#xff0c;创作者往往兴奋地截图、转发、设为壁纸——却极少有人按…...

从日偏食图像处理开始:手把手在VS2019里跑通你的第一个OpenCV 4.3程序

从日偏食图像处理开始&#xff1a;手把手在VS2019里跑通你的第一个OpenCV 4.3程序 当那张日偏食照片第一次在屏幕上成功显示时&#xff0c;仿佛打开了计算机视觉的大门。本文将带你从零开始&#xff0c;用VS2019和OpenCV 4.3实现这个充满仪式感的"Hello World"——不…...

C++项目集成Tesseract 5.x踩坑实录:从编译选项到内存管理的完整避坑指南

C项目集成Tesseract 5.x踩坑实录&#xff1a;从编译选项到内存管理的完整避坑指南 在计算机视觉和文档处理领域&#xff0c;Tesseract OCR引擎以其开源免费、多语言支持和较高的识别准确率&#xff0c;成为众多C项目的首选集成方案。然而&#xff0c;从源码编译到生产环境部署&…...

Zotero Duplicates Merger:5分钟搞定文献库重复问题

Zotero Duplicates Merger&#xff1a;5分钟搞定文献库重复问题 【免费下载链接】ZoteroDuplicatesMerger A zotero plugin to automatically merge duplicate items 项目地址: https://gitcode.com/gh_mirrors/zo/ZoteroDuplicatesMerger 还在为Zotero文献库中堆积如山…...