刚好有时间,跟着一位老师学习了一下c语言基础,我个人只会写一点PHP,因为PHP的zend引擎是是使用C编写的解释器(弱编译器),所以PHP语言归根结底是属于c的高级分支,PHP脚本在编译的过程中,第一步执行的是zend(c解释器)的解释,然后依次执行c类似的编译过程,所以PHP语言执行效率从理论上来讲不可能超过c,这也是c开发者看不起我们PHP语言的根本原因吧,可是仔细想想c/c++开发者能看得上什么语言呢,哈哈哈,玩笑话,不喜勿喷
![](https://img.haomeiwen.com/i7237162/abf063f80c7308ac.png)
test.c文件的内容
#include <stdio.h>
int main(void) {
printf("交换机登录系统\n");
printf("1登录%.3f\n", 1.112);
printf("2创建账号\n");
printf("3推出\n");
return 0;
}
编译原文件,会在当前目录产生一个编译完的程序a.out
gcc test.c
![](https://img.haomeiwen.com/i7237162/cedd118e42faefd4.png)
./a.out 执行程序,接下来要做的是分析test.c到a.out的编译过程
重点 程序的执行过程拿C来举例 C(编译)=>汇编(二进制 01代码)=>可执行文件
gcc -E test.c -o test1 预编译test.c把预编译代码写入e.c, 并没有真正执行编译,而是把#include <stdio.h>,把stdio.h(C的基础类库)的代码和test.c的代码同时写入e.c,test.c的代码在底部
![](https://img.haomeiwen.com/i7237162/d257cd1a9f9f4e4a.png)
gcc -S e.c -o s.s 编译e.c到s.s,此步骤执行编译过程,此时 s.s中是编译之后内容
![](https://img.haomeiwen.com/i7237162/390efb0a5e5e13b2.png)
gcc -c s.s -o c.o 执行汇编,此时c.o中是汇编之后的内容(二进制文件)
![](https://img.haomeiwen.com/i7237162/41901230795b68a6.png)
gcc c.o -o b.out 创建可执行文件
![](https://img.haomeiwen.com/i7237162/02d410cadd40ecb7.png)
此时我们执行./a.out再执行./b.out发现输出结果一直,那好,完成了一次高级语言的编译过程
![](https://img.haomeiwen.com/i7237162/c6dc55a019b670c0.png)
网友评论