IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 地表最强C语言汇总(十五)程序的环境和预处理(持续更新) -> 正文阅读

[C++知识库]地表最强C语言汇总(十五)程序的环境和预处理(持续更新)

最新更新时间:2021.12.26
环境:CLion2021.3;64位macOS Big Sur


地表最强C语言系列传送门:
地表最强C语言汇总(一)基本数据类型
地表最强C语言汇总(二)变量和常量
地表最强C语言汇总(三)字符串+转义字符+注释
地表最强C语言汇总(四)分支语句
地表最强C语言汇总(五)循环语句
地表最强C语言汇总(六)函数
地表最强C语言汇总(七)数组
地表最强C语言汇总(八)操作符
地表最强C语言汇总(九)关键字
地表最强C语言汇总(十)#define定义常量和宏
地表最强C语言汇总(十一)指针
地表最强C语言汇总(十二)结构体
地表最强C语言汇总(十三)动态内存管理,含柔性数组
地表最强C语言汇总(十四)文件(持续更新)
地表最强C语言汇总(十五)程序的环境和预处理预处理(持续更新)
地表最强C语言汇总(十六)一些自定义函数(持续更新)
地表最强C语言汇总(十七)阅读程序(持续更新)

十五、预处理

15.1 程序的环境

在ANSI C的任何一种实现中,存在两个不同的环境,第一种是翻译环境,在这个环境中源代码被转换为可执行的机器指令; 第二种是执行环境,它用于实际执行代码。
test.c --> test.exec的过程依赖的是翻译环境(当前为CLion),运行test.exec所依赖的是运行环境,产生运行结果。

  1. 程序的翻译环境
    翻译环境工作流程:工程中的每个.c源文件单独经过编译器处理,变成.o(lunix下的目标文件)文件,然后链接器会将所有的目标文件和链接库(.lib静态库)链接在一起生成可执行程序(exec)。因此,翻译环境可分为两部分:编译(依靠编译器)和链接(依靠链接器)
    其中编译分为三个步骤:
    (1)预编译(预处理),通过gcc test.c -E > test.i将预处理的后的文件重定向到test.i中,便于查看。通过查看stdio.h中的内容,说明了在预处理阶段完成了:
    1.头文件的包含,其实就是将头文件中的内容拷贝到相应位置;
    2.#define定义的符号和宏的替换,因此后期程序在编译,汇编的时候也是看不到的,后来程序运行也是看不到的,就不便于调试;
    3.注释删除,因此程序中无论有多少注释,都不会给程序带来负担。
    上述这些其实都是文本操作,也就是说,预处理阶段实际上是完成了一些文本操作。
    (2)编译,通过gcc test.i(test.c也可以) -S对文件进行编译,生成test.s文件,把C语言代码转化为汇编代码,编译阶段完成了:
    1.语法分析
    2.词法分析
    3.语义分析
    4.符号汇总:将.c中的全局符号汇总
    (3)汇编,通过gcc test.s -c对编译生成的.s文件处理,生成test.o文件(即目标文件),-c意思是汇编之后停止,不要进行下一步。test.o是elf格式的,可以使用objdump查看这个文件,汇编阶段完成了:
    1.生成符号表:
    2.把汇编代码转换成了机器指令(二进制指令)

  2. 程序的执行环境

15.2 详解:C语言程序的编译+链接

15.3 预定义符号介绍

15.4 预处理指令#define

15.5 宏和函数的对比

15.6 预处理操作符#和##介绍

15.7 命令行定义

15.7 预处理指令#include

15.7 预处理指令#undef

15.7 条件编译

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-26 21:57:27  更:2021-12-26 21:59:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:35:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码