C语言高级专题.番外篇-程序员和编译器之间的暧昧

“C 语言高级主题。附加内容 – 程序员和编译器之间的歧义”

图片[1]-C语言高级专题.番外篇-程序员和编译器之间的暧昧-4747i站长资讯

第一部分,章节目录

4.10.1.编程史

4.10.2.程序员、编译器和 CPU 之间的三角恋

4.10.3.像编译器一样思考

第二部分,章节介绍

4.10.1.编程史

本节从程序员工作的演进史出发,从本质上分析编程的本质,有助于理解程序员、程序和机器之间的关系。

4.10.2.程序员、编译器和 CPU 之间的三角恋

本节分析程序员、编译器和机器(CPU)之间的关系,目的是让大家从本质上认识编译器的作用,从而了解编译器的行为以及对我们程序编写的约束。

4.10.3.像编译器一样思考

本节为结语,在前两节分析的基础上提出一个观点,即程序员只有像编译器一样思考,才能使程序运行正确、更快、更好。

第三部分c聊天程序源码,上课记录

4.10.1.编程史

4.10.1.1、CPU只需要1和0组成的二进制数据

(1)无论编程如何变化,最终编程得到的可执行二进制程序都是由CPU运行的。CPU需要的只是一串按照规则排列的二进制1和0(机器指令)当 CPU 被设计为数字(机器码)时,CPU 并不关心二进制文件是怎么来的。

(2)这些二进制文件可能由非常强大的程序员用 1 和 0 直接拼出;也可以用汇编语言编译;也可以用 C 语言编译;或者用语言编写和解释如java C# php bash;

(3)编程工作的演进其实一直在处理下一个层次的段落:用什么语言来写程序(用某种语言编程),然后怎么把这个程序的源代码转成二进制(编译器发明)。

(4)CPU接收到一系列1010序列后如何工作以达到目的,这是设计制造CPU的公司要考虑的,与软件工程师无关。

4.10.1.2、早期纸卡打卡程序员

(1)最早的时候,CPU也很简单,指令集很少,二进制数也不多。那个时候编译器还没发明,编程语言也没发明。那个时候,二进制直接编程。

(2)总结:最早的编程没有语言和编译器,程序员直接用二进制与机器(CPU)对话。

(3)这种方法的缺点是不容易扩展。随着CPU的进一步复杂化,指令数量和指令位数增加,编程难度成倍增加。人类大脑慢慢地遵循着这个节奏。

4.10.1.3、编程的第一次革命:从二进制机器码到汇编语言

(1)第一次革命是:汇编语言的发明。汇编语言的本质就是用符号代替一串二进制。

MOV 010

(2)有了汇编语言,程序员再也不用记忆二进制序列了。编程时只需要用汇编指令来编程,汇编指令就是一个符号(符号是由字组成的,例如 MOV )。因为人脑天生对文字符号更友好c聊天程序源码,所以用符号编程更容易。

(3)汇编语言编写的源程序不能直接由CPU运行。它必须经过一个翻译过程,将源代码翻译成二进制序列后才能交给CPU。这个翻译过程是称为装配,平移动作由装配装置完成。

4.10.1.4、编程的第二次革命:从汇编语言到C语言

(1)汇编语言也有一些不尽人意的地方,比如:没有可移植性。在这个CPU上写的汇编程序不能直接在另一个CPU上运行。所以,汇编语言和CPU是一一对应的。

(2)为了可移植性,发明了高级语言。第一个高级语言是C。C语言更接近人类的思维,发明了很多CPU没有的供人类思维使用的东西,比如数组最终的目的是降低编程的难度,让高级语言更接近人类的思维,然后通过编译器、汇编器等将这些源代码转换成二进制,然后在CPU上运行。

4.10.1.5、革命无止境,关卡越来越多

(1)C语言之上还有更高级的语言,如:C++、Java、C#、bash等语言本身提供的包,越往上编程难度越低,越容易掌握语言。

4.10.2.程序员、编译器和 CPU 之间的三角恋

4.10.2.1、CPU只懂二进制机器指令

(1)CPU是最后的工作,CPU只识别也只接受二进制。

4.10.2.2、人类更喜欢符号而不是二进制

(1)人脑本身不喜欢二进制,但喜欢符号和文字。

(2)人和机器之间有代沟,所以编程并不容易。

4.10.2.3、人(程序员)和机器(CPU)之间的桥梁:编译器

(1)编译器降低了编程的难度。编译器的代表就是编程语言。每种编程语言都有对应的编译器。这个编译器的作用就是把这种语言的源文件编译成可执行程序。

(2)关键是:有了编译器(高级语言)之后,我们的程序员不再盯着CPU(二进制),而是盯着编译器(编程语言,编程语言语法),所以学习编程的关键变成了学习编译器的习惯,也就是编程语言的语法。

4.10.2.4、发明一门语言的关键在于发明它的编译器

图片[2]-C语言高级专题.番外篇-程序员和编译器之间的暧昧-4747i站长资讯

(1)编译语言的关键是编译器。yacc 和 lex 工具被用来发明编程语言。

4.10.2.5、高级语言和低级语言的区别

(1)语言越高,越接近人脑;语言越低,越接近机器的需求。

(2)人与机器之间的总劳动量(总复杂度)是守恒的。如果人稍微复杂一点,机器可以更简单;如果人更简单,机器需要更复杂。这个定律描述:编程语言越简单,人越容易使用越简单,编译器设计越复杂;编程语言越复杂,程序员使用起来越麻烦,越简单编译器是为了设计更高的CPU执行效率。

4.10.3.像编译器一样思考

4.10.3.1、 的语法是什么?语法是编译器的习惯

(1)编程中的编译器响应是语法。

例如1:

对于 (i=0; 我

{

xxx;

}

例如2:

诠释我;!!我;

分析: !在 C 语言中,它意味着逻辑反转。逻辑取反是指0取反为1,非0数取反为0.

问题:让你用C语言编程:如果一个数i为0,返回0,如果不是0,返回1

一般实现: if (i == 0){ 0;} else{ 1;}

或者您可以使用三元运算符: (i==0)?(0):(1);

极客写作:!!i;

4.10.3.2、学习一门语言就像认识一个朋友

(1)从新的开始认识一个人到成为好朋友,你要经历:时间,一起努力。

(2)学习一门编程语言还需要:时间、练习(一起工作)

4.10.3.3、学习编程语言需要同理心

(1)处理器注释,预处理中的空白行。

4.10.3.4、注重实践中的探索与总结

(1)第 1 点:在实践中

(2)第 2 点:探索

(3)第 3 点:总结

图片[3]-C语言高级专题.番外篇-程序员和编译器之间的暧昧-4747i站长资讯

文章来源:http://www.toutiao.com/a7039696422329139750/

------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片