c语言如何看懂别人的程序

c语言如何看懂别人的程序,第1张

首先我假设你已经学过C语言了,没学过回去学去。

然后对程序里出现的每一个词,根据语法判断他是变量还是函数,找到它在哪定义的,是什么含义。复杂的程序列个变量表和函数表;如果是子程序,看他的输入和输出是什么,用一句话概括它的功能。

如果再看不懂,把程序扔给编程的人,让他慢慢改去

备注:这是我问答内容的一个精编版,增加了一些内容,所以和原内容略有不同。

去年底,有中国开发者已经开发出文言文编程语言,并在GitHub上摘得了5500星,在国内引起不小反响。这件事给普通人的印象是, 科技 发展日新月异,电脑CPU太厉害,都能读懂文言文了!

CPU真的能看懂文言文代码吗?答案是CPU既看不懂文言文代码,也看不懂英文代码。

现在的CPU晶体管数量动辄几十亿个,结构非常复杂,但内部传输的信号只有两种:高电压和低电压,分别代表数字信号“1”和“0”(也有相反的),因此CPU唯一能看懂的就是由“1”和“0”组成的代码。

由于程序(代码)存储在电脑硬盘中时,也是“1”和“0”的形式,是否就意味着,只要程序存到硬盘中,CPU就能认识呢?

答案是CPU仍然看不懂这些程序,因为以“1”和“0”位模式存储的程序和以“1”和“0”写成的机器语言完全是两回事,简单说,两者的区别类似于汉语书和英语书都用纸和油墨印制,但依然是两种不同的语言,不会英语的依然看不懂英语书。

机器语言是CPU唯一能看懂的语言,也是第一代编程语言。

说明:早期的计算机程序员使用机器语言编程,将用0和1数字编成的程序代码打在纸带或卡片上(打孔代表1,不打孔代表0),再将它通过纸带机或卡片机输入计算机,进行运算。

机器语言的最大特点是面向计算机硬件编程,简单说就是程序员需要通晓计算机硬件知识,写的程序要真实表示数据是如何被计算机 *** 纵的。对程序员来说这就比较头大,一方面不仅需要通晓计算机硬件知识,另一方面如果计算机使用了不同的硬件,那么就得重新编程。

毕竟上得了“厅堂”(搞掂硬件)下得了“厨房”(玩得转软件),只有少数大神能做到,加上机器语言纯用“0”和“1”序列组成,非常单调枯燥,不仅扼杀了编程的趣味,而且对视力也是一种考验,稍微一眼花,看错1或0的排列位置,就会制造一个大BUG。

于是,有一帮人开始琢磨了:能不能将计算机硬件从编程中分离出来,让硬件知识小白也能编程?

最先开窍的是蓝色巨人IBM,它在其System/360计算机中引入了ISA(Instruction Set Architecture)概念,将编程所需要了解的硬件信息从硬件中抽象出来,这样编程人员就可以面向ISA编程。由于ISA是用来描述编程时用到的抽象机器(不是具体的电脑CPU),包括了一套指令集和一些寄存器,因此,程序员只要知道ISA,不需要了解具体的硬件知识,就可以编写程序,在ISA相同的电脑上运行。

这样一来,就出现了汇编语言,但汇编语言用符号写成,还是不够接地气儿,于是高级语言就诞生了。高级语言的诞生,使程序员将精力从复杂的计算机结构转移到要解决的问题,从而可以专心烹调程序大餐。

由此也可以看出,现在的程序员并不都是了解计算机硬件的,所以妹子们不要指望自己的程序员男朋友给你DIY电脑,或者电脑坏了,他能给你省下一笔修理费。他说不会修,那就是真的不会修。

自从高级语言出现后,人类开始了在编程语言上的放飞自我,经过数十年的发明创造,现在的高级编程语言已超过2500种,像比较知名的C++和Java等,都属于高级语言。

但问题出现了,CPU能理解的机器语言还是那个机器语言,几十年来没有变化,让它读懂高级语言那是不可能的。

怎么办?

其实,早在高级语言出现之前的汇编语言时代,聪明的计算机研发人员就开发出了专门的程序,用来将汇编语言和高级语言翻译成机器语言,其过程相当于将英语名著翻译成汉语著作。

说白了,这种翻译程序相当于人类中的翻译家。

翻译程序有两种工作方法:编译和解释,相应的程序名称是编译器和解释器。两者的区别是,编译是在执行前把整个源程序(高级语言程序)翻译成目标程序(机器语言程序),而解释是一次只翻译和执行源程序中的一行。

打个形象的比方,解释器相当于发布会的实时翻译,演讲的嘉宾说一句,实时翻译马上翻译一句。编译器则相当于著作翻译家,整本翻译完成后,再让出版社印刷上市。

经过翻译程序的努力,现在CPU能看懂程序员写的程序了。当然,用开头提到的文言文编程语言编写的程序想要让CPU看懂,还得多一道翻译步骤,即要么翻译成Javascript,要么翻译成Python。多转了一圈,不知道程序执行效率如何。

由于CPU不能直接理解用高级语言写成的代码,必须依赖翻译程序翻译成机器语言,因此翻译程序可以极大地影响甚至决定处理器性能的发挥。如果没有一个好的翻译程序,那么CPU的性能再强大,也好比茶壶装的饺子,倒不出来。

正因为如此,谷歌在安卓44之后,抛弃了Dalvik虚拟机,改为ART,实际是将翻译程序从解释器切换到编译器,发挥了芯片的性能,提高了程序运行效率。

现在,手机大厂包括华为、OPPO和vivo都开始重视编译器开发,说到底就是为了发挥芯片性能,让它不再成为倒不出饺子的茶壶。

最后总结一下,用翻译程序把程序员编写的程序翻译成二进制代码的机器语言后,CPU就能看懂代码了,而且翻译程序的优劣可以影响乃至决定CPU性能发挥。

源自网络,版权归作者所有。

首先,CJ_Test是一个结构体,byt也是一个结构体,不过byt是被CJ_Test包含起来了,第一句是一个三目运算符,CJ_Testbyte2&(1<<CJ_Testsbitm0)是CJ_Test结构体里面的byt结构体里面的成员e2,与CJ_Test结构体里面的sbit结构体里面的成员m0进行与 *** 作,如果为0则执行((((St595_dispCount)&0x00008000)0:1)<<CJ_Testsbitm0),否则执行((1<<CJ_Testsbitm0)|(((St595_dispCount)&0x00004000)0:CJ_Testbyte2)),这两句里面也是三目运算符,原理一样,再往下就是定义一个联合,里面是两个结构体sbit和byt,不明白就继续追问

随便买一本代码比较多的,个人推荐谭浩强的,其实学习C语言包括其他计算机编程语言,不能像小学生那个学习模式了。基本语法没有多少,

常用的语句也就那几个。本人认为没有必要像小学生那样每天都看课本,等看完了,你会发现什么都没有学到。

开始的时候自己可以找一点例子(书上的例题就行),不要看简单,但是能让自己对语法和格式进行熟悉。

我甚至认为看代码之前可以不看书,自己去领悟代码的意思,实在领悟不了,在看书,这样学习速度会比较快。还有一点最重要的是:要不停的练习,找一些经典的算法进行练习,或者编写一些能够使用的小程序。这样对技术和兴趣都是很好的提高

以上就是我的观点,说得不好请见谅。呵呵

这么说,象HELLOE WORLD这样的程序你肯定会写了

你把计算机当成你的一个学生,编程就是教计算机怎么做的问题比如菲波拉奇数列,就是这个:

1,1,2,3,5,8,13,

这个数列的特点是从第三个数(2)开始,等于它前面两个数的和于是我们要定义三个变量a1,a2,a3;令a1=1,a2=1,a3=a1+a2=1+1=2,这样前3个数就出来了,在算第4个数时,要把用到第2个数和第3个数,于是,我们先把a2的值保存在a1,a3的值保存在a2,(注意!顺序不能相反,因为如果先把a3的值保存在a2中的话,a2中的数即第2个1就被覆盖了,就不能把a2保存到a1中了)再把第4个数保存在a3中,如此往复,可以算出这个数列的后面的前n个数

比如要求前20个数:

程序如下:

int main(void)

{

int a1,a2,a3,i;

a1=1;

a2=1;

printf("%8d%8d",a1,a2);

i=3;

a3=a1+a2;

while(i<=20)

{

printf("%d\n",a3);

a1=a2;

a2=a3;

a3=a1+a2;

i++;

}

getch();

}

这里我只举例说了一下思路,当然最简单又最直接的办法是多看例题,甚至背程序,经过一段时间后,自然就会了

经验,写的多了就知道了 ,

1、看程序文件后缀名如:c 是C语言,,java 是JAVA,,,cs是C#

2、看头文件 #include 是 C ,import是 JAVA using 是 C#

windows上的话,不考虑脚本语言,只说exe及dll,常用的做法是使用工具ExeinfoPE来查看,该工具可查看一个可执行文件是否被加壳加密,如果未被加壳加密,那么就可以查看推测的编写语言。

windows:dumpbin或者 安装Dependency Walker。这几个都是查看可执行程序dll依赖关系的命令,看其依赖的库,基本可以判断出是何种编程语言所编写的。

介绍

编程语言处在不断的发展和变化中,从最初的机器语言发展到如今的2500种以上的高级语言,每种语言都有其特定的用途和不同的发展轨迹。

编程语言并不像人类自然语言发展变化一样的缓慢而又持久,其发展是相当快速的,这主要是计算机硬件、互联网和IT业的发展促进了编程语言的发展。

数组元素倒置程序x[i],i=0,1,2,3,4;而x[j],j=9,8,7,6,5;

t=x[i];

x[i]=x[j];

x[j]=t;

这3条语句表示交换,第一个与最后一个交换,第二个与倒数第二个交换,循环退出时,完成整个数组的交换。

以上就是关于c语言如何看懂别人的程序全部的内容,包括:c语言如何看懂别人的程序、CPU是怎么看懂代码的、哪位大神能看懂如下一条程序(C语言)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9724015.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存