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语言)

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

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

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

基本情况如下图:

程序的翻译环境

编译:

预编译 编译 汇编

1、预编译(文本操作)(test.c(C语言代码)->test.i(C语言代码)):

1、头文件的包含
    #include----预处理指令
2、删除注释
3、#define定义
    符号的替换

2、编译(test.i(C语言代码)->test.s(汇编代码):

将c语言代码转换成汇编代码

1、语法分析

2、词法分析

3、语义分析

4、符号汇总
    全局符号汇总

3、汇编(test.s(汇编代码)->test.o(二进制指令)):

//目标文件在linus环境下是.o
//目标文件在windox环境下是.obj
1、形成符号表
    给符号汇总中的符号配上地址

链接(test.o add.o->a.out(可执行程序)):

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

1、

2、

默认填充值(没有任何意义)

多个目标文件进行链接的时候会通过符号表查看来自外部符号是否真实存在

程序的执行环境

程序执行的过程:
1、 程序必须载入内存中。在有操作系统的环境中:一般这个由操作系统完成。在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。
2、程序的执行便开始。接着便调用main函数。

3、开始执行程序代码。这个时候程序将使用一个运行时堆栈(stack),存储函数的局部变量和返回地址。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。
4、 终止程序。正常终止main函数;也有可能是意外终止。

源程序到运行的全过程

详解预处理

预处理符号

__FILE__ //进行编译的源文件
__LINE__ //文件当前的行号
__DATE__ //文件被编译的日期
__TIME__ //文件被编译的时间
__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义 vs2019不完全遵循,不能使用__STDC__

使用:

#include<stdio.h>
int main()
{
    printf("%s\n",__FILE__);//文件名
    printf("%s\n",__LINE__);//这一行行数
    printf("%s\n",__DATE__);//日期
    printf("%s\n",__TIME__);//时间
}

实例;记录日志

int main()
{
    FILE*pf=fopen("log.txt","w");
    if(pf==NULL)
    {
        return 1;
    }
    for(i=0;i<10;i++)
    {
        fprintf(pf,"%s %s %s %d %d",__DATE__,__TIME__,__FILE__,__LINE__,i);
    }
    fclose(pf);
    pf=NULL;
    return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 12:43:52  更:2022-03-06 12:46:58 
 
开发: 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 4:48:34-

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