这就是所有这些#defines和#includes的含义。
C预处理是一个非常简单的过程:剪切粘贴。
当预处理器看到以下MyCode.c时:
#include "MyHeader.h"
void main(){
FunctionDefinedInHeader();
}
,只需打开文件MyHeader.h,然后将其内容粘贴到MyCode.c中:
// Begin of MyCode.c
// Begin of MyHeader.h
#ifndef MYHEADER_H
#define MYHEADER_H
void FunctionDefinedInHeader(); // Declare the function
# endif
// End of MyHeader.h
void main(){
FunctionDefinedInHeader(); // Use it
}
// End of MyCode
同样地,#定义 s的cut‘n粘贴的#if s的分析和潜在的除去等
在此步骤的最后,我们有一个预处理的C ++文件,没有任何#define,#if,#ifdef,#include,可以进行编译了。
编译器将C ++代码转换为CPU可以直接理解的表示形式。例如,以下代码:
int i=3;
int j=4*i+2;
将被翻译为:x86操作码。
mov dword ptr [i],3
mov eax,dword ptr [i]
lea ecx,[eax*4+2]
mov dword ptr [j],ecx
每个.cpp文件是分别编译的,结果二进制代码写在.o / .obj文件中。
请注意,我们还没有可执行文件:还需要执行一个步骤。
链接器获取所有二进制代码(您的代码,以及来自外部库的代码),并生成最终的可执行文件。一些注意事项:
链接器运行后,您将拥有一个可执行文件(Windows上为.exe,Unix上为.nothing_at_all):
启动可执行文件时,操作系统将打开.exe,然后将x86操作码放入内存。如前所述,某些代码目前尚不可用:动态库中的代码。但是链接器很好,可以说在哪里寻找它:.exe清楚地表明glClearColor函数是在OpenGL32.dll中实现的。
Windows将愉快地打开.dll并找到glClearColor:
有时找不到.dll,可能是因为您搞砸了安装过程,并且程序无法运行。
原文:https://www.cnblogs.com/wwhhgg/p/12620257.html