写在前面:本文仅供以后自己学习参考和学习交流,内容来自于互联网以及自身理解。如有侵权请及时联系、如有错误请不吝指教。
要理解C文件(.c)与头文件(.h),一般先需要弄明白编译器的工作过程。一般编译器会进行以下操作:
1.预处理:做宏定义、文件包含、条件编译工作,特点是带有“#”的语句;
详见:C语言三种预处理功能
2.词法与语法分析阶段:顾名思义,检查词法语法错误;
3.编译阶段:先编译成汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件 (.obj文件);
4.连接阶段:将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件(生成.exe文件)。
编译器工作过程:查找main.c文件 --> 目标文件(.obj) --> 可执行文件(.exe)
例如,有以下代码,其输出为5:
#include<stdio.h>
#define uint unsigned int
int fun(int a);
void main()
{
uint x=5;
printf("%d",fun(x));
}
int fun(int a)
{
return a;
}
编译器先包含了头文件stdio.h,再将#define后所有uint替换为unsigned int,接着检查错误词法语法,生成.obj,最后生成.exe并运行。