C语言的程序环境

article/2025/8/22 17:55:22

文章目录

    • 一.前言
    • 二.编译环境
    • 2.1预处理阶段
    • 2.2编译阶段
    • 2.3汇编阶段
    • 2.4链接阶段
    • 三.运行环境

一.前言

在ANSI C的任何一种实现中,存在两个不同的环境
1.翻译环境,在这个环境中源代码被转换为可执行的机器指令.
2.执行环境,它用于实际执行代码.

二.编译环境

在这里插入图片描述
我们每写完一个C语言代码,在编译的时候都会先经过编译环境把它变成可执行程序
但是编译环境还要分成几个步骤:
预处理(预编译),编译,汇编,链接
在这里插入图片描述

这四个步骤需要用到两个工具才能实现:编译器,链接器
在这里插入图片描述
预处理–汇编阶段都叫编译。

当然我们再写代码的时候,不可能只有一个.c文件。再写多个.c文件后在编译:
在这里插入图片描述

每个.c文件通过编译器形成相对应的目标文件,然后所有的目标文件+链接库通过链接器形成可执行程序
这些.c文件,目标文件在我们创建的工程里都是可以看到的
在这里插入图片描述

在运行.c的过程虽然很复杂,但是我们有很多可以用的IDE,比如我现在用的VS2022。
可能会有人想什么是IDE?IDE是集成开发环境
我们刚刚提到的编译器(el.exe),链接器(link.exe),还有编辑器,调试器。我们用到的IDE就是帮我们把这些封装在了一起,我们调试,运行的时候直接用就行。

2.1预处理阶段

我们程序在预编译之后会发生什么呢?

  1. 头文件的包含。我们再写代码的时候,像stdio.h,stdlib.h这些头文件肯定都会用到。所以在预编译之后,就把这些头文件里的内容全部放进去。
  2. 注释的消除。我们在写代码的时候会有写注释的习惯,我们也知道这些注释,是根本不会被运行的,那是因为注释在预编译的时候已经消掉了。
  3. #define符号的替换。我们用到的宏定义也会被替换到程序中。

2.2编译阶段

编译阶段是把C语言代码转换成汇编代码
然后在进行几个步骤:

语法分析
词法分析
语义分析
符号汇总

这里我主要带你们认识一下符号汇总:

每个.c文件都或多或少用到函数,变量。
符号汇总就是把每个.c程序里用到的函数名全局变量名都各自汇总在一起。这就是符号汇总。

2.3汇编阶段

  • 汇编指令转化成二进制指令
  • 形成符号表

什么是符号表?
我们在编译的环节有一个符号汇总,就是把所有函数名,全局变量名字放到一起。
符号表,你可以认为是这个样子的
在这里插入图片描述
就是每个文件都会有这样的一个表。具体有什么用,一会在链接的地方就可以体现出来了
这里有个要注意的点,text.c和Add.c都有Add.c函数,但是在Add.c文件中Add函数是有一个固定的地址的。但是在text.c文件里我们只是声明了一下,地址也是随机的。

2.4链接阶段

  1. 合并段表
  2. 符号表的合并和重定位

合并段表
我们刚才讲过在编译阶段结束后会生成一个.obj的目标文件(linux环境下生成的是.o文件)。这个目标文件它是elf文件格式的。
就是它这个文件里的内容是分成几个部分存放的:
在这里插入图片描述
合并段表,就是把每个.c文件形成的.obj文件各自的部分全部合成一起,形成一个新的文件
在这里插入图片描述

符号表的合并和重定位:
在汇编阶段,每个文件都会形成一个符号表,但是我们text.c里的Add只是声明了一下,地址也是随机的,没有意义。
所以我们在合并的时候会重定位,将Add.c里的Add函数当成新的符号表的内容。
合并好之后,程序就可以在运行的时候通过各自函数的地址来找到对应的函数。

如果我们没有Add这个函数会怎么样?
在这里插入图片描述
你看就会报一个错误无法解析外部符号,而且是从LNK2019这里报的,就是说在链接这块出现了问题。

我们看:
在这里插入图片描述
发现在链接的过程中好像还有一个东西–>链接库。
链接库就是我们引入的外部的那些函数所用到的库,我们把链接库也一起添加上才能知道我们用到的函数的具体位置。

三.运行环境

程序执行的过程:

  1. 程序必须载入内存中。在有操作系统的环境中:一般这个由操作系统完成。在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成,像单片机,你就需要把写好的代码烧到单片机里去。
  2. 程序的执行便开始。接着便调用main函数。
  3. 开始执行程序代码。这个时候程序将使用一个运行时堆栈(stack),存储函数的局部变量和返回地址。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。关于这一步想要了解的可以看看这个->函数栈帧的创建与销毁。
  4. 终止程序。正常终止main函数;也有可能是意外终止。

http://chatgpt.dhexx.cn/article/mBSnZd2E.shtml

相关文章

如何搭建C语言环境

以下文章来源于:公_众_号开源电子网 读取更多技术文章,请扫码关注 如何搭建C语言环境 前言 C语言作为嵌入式开发的必备掌握技能,嵌入式能力的提升速度很大程度在于C语言的掌握能力。正所谓:工欲善其事,必先利其器。…

C语言环境安装

C语言环境安装 1.下载mingw-get-setup.exe安装程序。1.1 官网下载:1.2 百度云地址:1.3 从git下载安装包 2.点击安装开始3.配置环境变量4.测试环境 1.下载mingw-get-setup.exe安装程序。 1.1 官网下载: http://www.mingw.org/ 1.2 百度云地…

c语言编程环境配置

hello,小伙伴们,大家好,我是小浩,从今天开始,我会跟大家一起学习编程,大家有什么疑问或者意见可以留言或私信我。 下面我们开始今天的正式学习之旅: 相信大家都知道,编程语言有机器…

C语言入门——C程序开发环境搭建

C语言的开发工具 目前主流的开发工具就是Visual Studio 从2018年3月开始,全国二级C语言平台更改为VC2010 Express版,因此我们选择VC2010 Express VC2010 Express介绍 vc2010全称为microsoft visual c 2010 Express是微软的一款产品vc2010是一款IDE&am…

C语言入门之C语言开发环境搭建

C语言入门之C语言开发环境搭建 关注公众号 风色年代(itfantasycc) 领完整不限速版C语言开发环境资源包 集成环境下载地址:http://pan.baidu.com/s/1skMaZ6H 备用下载链接: https://pan.baidu.com/s/1yZsNO4khxDZ9qmuZFM_SEA 提取码: hatj …

怎么搭建一个C语言的开发环境?

什么是C语言 C语言是一种通用的、面向过程的编程语言,它具有高效、灵活、可移植等优点。在最近20多年里,它被运用在各种系统软件与应用软件的开发中,是使用最广泛的编程语言之一。本章将针对C语言的发展历史、开发环境搭建、和C语言的运行机…

C 语言学习笔记(一):C 语言的开发环境

文章目录 一、常用开发环境二、安装 Visual Studio 2019三、Visual Studio 2019 开发环境介绍四、使用 Visual Studio 2019 开发 C 程序 为什么会突然写关于 C 语言系列的博客? 原因是笔者的一个弟弟在大一下学期即将开始学习 C 语言,这里回忆起了当时笔者大学时学…

C语言的开发环境

所有的高级计算机语言都需要用编译器把程序编译成计算机能够看得懂的二进制。 所以我们需要一个环境来开发程序,从而通过程序实现一系列“骚操作。” 1. UNIX系统 C语言的诞生源于UNIX系统,也因UNIX系统而闻名。 在UNIX系统编辑C程序,通常…

C语言环境简介

C语言环境简介 C语言的开发环境有哪些? (1) Windows 下: Visual Studio(简称VS) 、Eclipse、QT、Code::Blocks (2) Linux 下: VI 、VIM 、Eclipse、QT (3) MAC 下: Xcode 、QT QT、Eclipse是跨平台的 2、Windows系统下的Visual Studio 开…

【新手必看】C语言开发环境,请查收!

C语言开发环境的选择, 貌似是告诉我们,工欲善其事,必先利其器。 01、Visual Studio Visual Studio(简称 VS),它是 Windows 下的标准 IDE,VS系列为IDE(集成开发环境),为了适应最新的 Windows 操作系统,微软每隔一段时间(一般是一两年)就会对 VS 进行升级,为目…

C 语言学习笔记(三):C 语言开发环境搭建

文章目录 一、Windows二、Linux2.1 VMware Workstation Pro软件简介及安装2.2 安装 Ubuntu 系统2.2.1 Ubuntu 下载2.2.2 安装 Ubuntu2.2.3 安装共享文件夹 2.3 概念介绍2.3.1 源文件2.3.2 C语言编译和链接详解2.3.3 编译(Compile)2.3.4 链接(Link)2.3.5 C语言编译器2.3.6 集成开…

美团2021校招笔试-编程题题解

题目链接 小美的送花线路 题意: 有n个点的一棵树,玩家开始在1号点,要遍历所有的点,使得走过的路程最短。 问:每个点到1号点的 距离和 是多少? 玩家遍历的最短路程是多少? 题解: 由…

❤️TikTok字节跳动编程题实战2022校招——吐血分享总结(第一弹)。

❤️TikTok字节跳动编程题实战2022校招——吐血分享总结。 前言说明一、算法编程题(种树)二、算法编程题(小A的吃鸡之旅)三、算法编程题(有序最大K位数)四、算法编程题(测试计划的最大成功率&am…

C语言经典编程题100例(1-20)

1、练习2-1 Programming in C is fun! 2、练习2-3 输出倒三角图案 3、练习2-4 温度转换 4、练习2-6 计算物体自由下落的距离 5、练习2-8 计算摄氏温度 6、练习2-9 整数四则运算 7、练习2-10 计算分段函数[1] 8、练习2-11 计算分段函数[2] 9、练习2-12 输出华氏-摄氏温度转换表 …

python123部分编程题

三位水仙花数 ans "" for i in range(100, 1000):sum 0for j in str(i):sum (eval(j)) ** 3if sum i:ans "{},".format(i) print(ans[:-1])猴子吃桃 II def peach(n):if n 10:return 1else:return (peach(n 1) 1) * 2for i in range(10, 0, -1):pr…

python期末考试编程题练习

定义一个函数,判断一个数是否为奇数,并求1-100范围内奇数的和、积。 def f(n):if n%2!0:return Trueelse:return False sum0 mul1 for i in range(1,100):if f(i):sumimul*i print(sum,mul) 若一个三位数每一位数字的3次幂之和都等于它本身&#xff0c…

德科华为od机试编程题

3道题,400分,第1、2题,难度1星,各100分,第3题难度2星,200分 牛客网在线,答题时长3h,录屏录像手机微信小程序监控 可以开本地idea 牛客网 牛客竞赛: OJ在线编程常见输入输出练习场 …

js基础编程题(持续更新)

一、小明被不明势力劫持。后被扔到x星站再无问津。小明得知每天都有飞船飞往地球,但需要108元的船票,而他却身无分文。 他决定在x星战打工。好心的老板答应包食宿,第1天给他1元钱。 并且,以后的每一天都比前一-天多2元钱&#xff…

C语言--基础编程题(各公司面试笔试真题)

下面我会给大家分享下各公司的面试笔试当中的真题,我挑出来的算是相对比较简单基础的一些题目,也适合基础水平的在学编程小白进行练习,大家现在,也动动脑,动动手,把下面我给出来的这些题目,大家…