目录
1. 程序的翻译环境和执行环境
翻译环境:在这个环境中源代码被转换为可执行的机器指令(二进制指令)
执行环境:它用于实现执行代码
集成开发环境
这里介绍一下我们用的VS到底是什么
2.编译与链接
以通讯录为例子
以一个小项目为例
2.1编译的几个阶段
因为VS2019集成开发环境不方便观察每个细节,所以后面是用liunx gcc来演示编辑和链接的
这里为了好举例我们只使用两个.c文件test.c和add.c
下面是整个详细的过程
在形成符号表的时候,函数会在链接文件中搜索指定的函数,然后将地址赋到对应的位置上,调用函数时就可以直接调用对应位置上的函数进行操作
2.2运行环境
程序执行的过程:
- 程序必须载入内存中。在有操作系统的环境中:一般这个由操作系统完成。在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。
- 程序的执行便开始。接着便调用main函数。
- 开始执行程序代码。这个时候程序将使用一个运行时堆栈(stack),存储函数的局部变量和返回
地址。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。 - 终止程序。正常终止main函数;也有可能是意外终止。
3.预处理详解
3.1预定义符号
这些预定义符号都是语言内置的。 这些符号能反映出程序此时此刻的状态
符号 | 代表内容与功能 |
---|---|
__FILE__ | 进行编译的源文件 |
__LINE__ | 文件当前的行号 |
__DATE__ | 文件被编译的日期 |
__TIME__ | 文件被编译的时间 |
__STDC__ | 如果编译器遵循ANSI C,其值为1,否则未定义,VS2019不遵循,gcc遵循 |
__func__ | 当前所使用的函数名 |
下面我们可以建立一个log.txt文件,作为日志文件,将运行的内容记录到日志文件中
#include<stdio.h>
int main()
{
FILE* pf = fopen("log.txt", "w");
if (pf == NULL)
{
return 1;
}
for