怎么确定一个软件是由什么c语言编写软件的

第一个 C 语言编译器是用什么语言编写的?
按投票排序
参考 Dennis M. Ritchie 写的 The Development of the C Language:,C 语言诞生的基本过程就是 Ken Thomson 不满意 BCPL,于是设计了 B 语言,并且用 BCPL 为 B 语言写了一个编译器,然后从这个编译器开始自举写新的 B 语言编译器。贝尔实验室的众人在 PDP-7 上用 B 语言写了各种各样的东西后又不满意 B 语言了,于是 1971 年 DMR 开始在新买的 PDP-11 上用 B 给 B 写扩展,称之为 NB (new B,此处省略吐槽若干),扩展着扩展着离 B 的画风越来越远了,就取了一个新名字变成了一门新语言—— C 语言。 1973 年夏天他们用手头的编译器和语言给 PDP-11 重写了一个 Unix Kernel。C 语言大约就是这个时期成型的。所以,可以说第一个 C 语言的编译器是用 B 语言,或者说是扩展过的 B 语言(NB)写的。因为是一边改进语言一边用改进了的编译器这样滚雪球写出来的,也可以看成是 C 语言写的?毕竟 DMR 也说了,很难确定什么时候 C 自己变成了一门新语言……
就放出了贝尔实验室里第一代 C 编译器的两个版本(talk is cheap, show me the code?
:D),这个时候(72年左右)后缀已经是 .c 了,还有部分 PDP-11 的汇编。主要分成两部分,第一步从源代码生成 AST 写进一个 intermediate
representation,第二步从上一步生成的 AST 通过查表生成 PDP-11 的汇编,然后还有一些处理 PDP-11
平台细节的汇编代码。lexer 和 parser(递归下降)都是手写的()。
C语言的原型ALGOL 60语言。(也称为A语言) 1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。 1967年,剑桥大学的Matin Richards 对CPL语言进行了简化,于是产生了BCPL语言。 1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。意思是将CPL语言煮干,提炼出它的精华。并且他用B语言写了第一个UNIX操作系统。 而在1973年,B语言也给人“煮”了一下,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。所以,最早的C语言编译器使用B语言写的。理论上来讲,用什么语言都可以,C\C++\JAVA\ruby等等
机器生汇编,汇编生B,B生C,C生万物。
用Beta版的C语言编译器编译的
又来打脸了。
第一个C语言编译器应该是用汇编写的,但是第一个成熟的C语言编译器应该是由汇编和C语言共同写的。
编译原理讲到了“自举编译器”。大意就是先用底层语言(应该是汇编)写一个能运行,但效率极低的C语言编译器(底层语言不好优化),有了C语言的编译器以后,就可以用C语言好好写一个编译器了,用之前那个运行没问题,但效率低得编译器编译一下,就得到了可以使用的编译器了。
其實,最早的fortran的編譯器是直接編寫出來的,但是後面algo,pascal之類的語言以來的編譯器都不是編寫出來的,而是由文法處理器根據語言的文法描述生成的。當時的文法處理器估計主要採用PDP-11的匯編語言編寫。畢竟到80年代,CMU和MIT allab的人都還熱衷與PDP-10的匯編程序編寫。但也不排除AT&T用它們的Fortran編譯器完成文法處理器。我覺得可以給現在在谷歌任職的Rob Pike寫一封禮貌得體的信詢問他是否還記得AT&T當時的文法處理器的使用情況。
是B语言么?请移步另一个问题:C编译器用什么语言写的如何查看一个软件的编译代码 如何确定软件是由什么语言编译的_百度知道
如何查看一个软件的编译代码 如何确定软件是由什么语言编译的
提问者采纳
我给你说一个道理你就明白比如你要得结果是91+8=9但是9不一定是1+8得来得还有可能是3*3所以往上推答案可以有很多种,根据一个可执行程序判断是什么语言写出来,太难了
提问者评价
太给力了,你的回答完美地解决了我的问题,非常感谢!
其他类似问题
为您推荐:
其他1条回答
你学几种汇编语言呢
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁如何判断一个程序是用什么语言写的?
[问题点数:40分,结帖人haha0909]
如何判断一个程序是用什么语言写的?
[问题点数:40分,结帖人haha0909]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关推荐:
2007年6月 总版技术专家分月排行榜第三
2007年6月 VC/MFC大版内专家分月排行榜第一
2014年11月 VC/MFC大版内专家分月排行榜第二2014年1月 VC/MFC大版内专家分月排行榜第二2013年10月 VC/MFC大版内专家分月排行榜第二2013年9月 VC/MFC大版内专家分月排行榜第二2013年6月 VC/MFC大版内专家分月排行榜第二2013年4月 VC/MFC大版内专家分月排行榜第二2012年6月 VC/MFC大版内专家分月排行榜第二
2015年7月 VC/MFC大版内专家分月排行榜第三2012年10月 VC/MFC大版内专家分月排行榜第三
2007年6月 总版技术专家分月排行榜第三
2007年6月 VC/MFC大版内专家分月排行榜第一
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。【求助】一个exe注册程序,如何知道是什么语言编写? [文字模式]
- 看雪安全论坛
查看完整版本 :
兔子璐璐一个exe注册程序,如何知道是什么语言编写?如何反汇编,又如何生成keygenerate,本人从未做过类似事情,求大侠指点,谢谢!
onbadday使用PEiD就可以知道!
兔子璐璐谢谢!请问在哪里能找到PEiD?
兔子璐璐已找到并查出是Borland Delphi 4.0 - 5.0,现在该怎么办,请大侠指点,谢谢!
兔子璐璐图片传上来,请问接下来我该做什么,望不吝赐教!
希望ingづ你要干什么
接下来就做什么啊
兔子璐璐已用Ollydbg反汇编,现在我找不到注册码在哪里存储,用“你输入”查找未果。该怎么办?
兔子璐璐在弹出窗口中找了,根本没戏,本人现毫无头绪。:eek:
我脱你这个好象前几天上传了又被删除了。问的方式不对。那个注册码就在程序里,是个明码。很好找。
兔子璐璐怎么找,我实在很笨,到不到呀!求您指点。
我脱程序你也没放上来。具休方法我也忘记了。反正不难。没程序没法帮你,要不你QQ我吧。
caslee真是很热心啊 谢谢了
黑手K..........
兔子璐璐我脱大侠确实很热心,已帮我找到,现在我已会一点了,另一个相似的我自己破了,谢谢大家!
jiamfeng还是要自己努力才行了~~
deanslan传上来我学习一下可以吗?
兔子璐璐传上来过,被斑竹删了。这是最初级的注册程序,用这块置顶的资料中一点皮毛就破了。怎么用C语言写一个计算器?
怎么用C语言写一个计算器?
要附带注释的,有详解更好。
补充:大家快点回答啊,我着急
补充:不用界面的,只要能解释清楚,让我这个菜鸟能看明白就行
补充:我说吧,我要的是简单的那种,就是WINDOWS自带计算器里面的标准版功能差不多的那种,不要界面
补充:我说吧,我要的是简单的那种,就是WINDOWS自带计算器里面的标准版功能差不多的那种,不要界面
补充:C题目六:设计一个简单计算器(限最多1人完成)
要求: 在功能上功能尽量模拟windows操作系统中的计算器,系统界面不做强制要求。
#include&stdio.h&#include&math.h&#include&malloc.h&double jisuan(char a[]){int i=1,j,k,m,cnt=0,t1=0,t2=0,t3=0;char nibo[50],zhan2[50];double x,n,l,z=0,zhan3[50];typedef struct{double d1;int d2;}typedef struct{dd data[50];}zhan1;zhan1 *shu=(zhan1 *)malloc(sizeof(zhan1));shu-&top=0;while(a[i]!='\0'){if(a[i]&='0'&&a[i]&='9'){z=0;j=i+1;while(a[j]&='0'&&a[j]&='9'){j++;}j--;for(k=i;k&=j;k++){z=z*10+a[k]-'0';}j=j+1;x=z;if(a[j]=='.'){l=1;i=j+1;j=i+1;while(a[j]&='0'&&a[j]&='9'){j++;}j--;for(k=i;k&=j;k++){n=pow(0.1,l);l=l+1;x=x+n*(a[k]-'0');}i=j+1;}else i=j;shu-&data[++shu-&top].d1=x;shu-&data[shu-&top].d2=++nibo[++t1]='0'+shu-&data[shu-&top].d2;nibo[t1+1]='\0';}else if(a[i]=='('){zhan2[++t2]=a[i];i++;}else if(a[i]==')'){j=t2;while(zhan2[j]!='('){nibo[++t1]=zhan2[j];nibo[t1+1]='\0';j--;}t2=j-1;i++;}else if(a[i]=='+'){while(t2&0&&zhan2[t2]!='('){nibo[++t1]=zhan2[t2];nibo[t1+1]='\0';t2--;}zhan2[++t2]=a[i];i++;}else if(a[i]=='-'){if(a[i-1]=='$'){a[0]='0';i=0;}else if(a[i-1]=='('){a[i-1]='0';a[i-2]='(';i=i-2;t2--;}else{while(t2&0&&zhan2[t2]!='('){nibo[++t1]=zhan2[t2];nibo[t1+1]='\0';t2--;}zhan2[++t2]=a[i];i++;}}else if(a[i]=='*'||a[i]=='/'){while(zhan2[t2]=='*'||zhan2[t2]=='/'||zhan2[t2]=='^'||zhan2[t2]=='#'){nibo[++t1]=zhan2[t2];nibo[t1+1]='\0';t2--;}zhan2[++t2]=a[i];i++;}else if(a[i]=='^'||a[i]=='#'){while(zhan2[t2]=='^'||zhan2[t2]=='#'){nibo[++t1]=zhan2[t2];nibo[t1+1]='\0';t2--;}zhan2[++t2]=a[i];i++;}}while(t2&0){nibo[++t1]=zhan2[t2];nibo[t1+1]='\0';t2--;}j=1;t3=0;while(j&=t1){
当了一个 不是自己写的 懒得写了
好像没完,能补充完整么
而且没有注释
着急要么?我这2天没空 过2天给你补
谢谢,我知道了,呵呵
其他回答 (4)
如果要控制台的,那非常简单,随便一搜索就能找到海量代码。
如果要有界面的,那恐怕没人写,纯SDK编程很累的。
你看,下面已经有人帮你搜索,并且贴出来了,你复制就是了。
很好用的,功能多··你理解的我帮你解释
include &stdio.h&#include &math.h&
void SubMain_f();
/*下级菜单,四则运算功能*/void
SolveForX_f();
/* 求一元一次方程解*/void
MmToM_f();
/* 单位转换:毫米转米*/void InchesToFeet_f();
/* 单位转换: 英尺转尺 */void CelsiusToFahrenheit_f();
/* 单位转换:摄氏转绝对温度*/void Quadformula_f();
/* 求一元二次方程解*/void SqRoot_f();
/* 平方根运算*/void CalcAdd_f();
/* 加法运算*/void CalcSub_f();
/* 减法运算*/void CalcDiv_f();
/* 除法运算*/void CalcMult_f();
/* 乘法运算*/void Menu_f();
/* 主菜单 */
int nNumber1, nNumber2, nR
int main(void){
int nMenuC
scanf(&%d&, &nMenuChoice); /*now you input the number you want */
switch(nMenuChoice) /* this is the long if statment used for the menu effect */
SolveForX_f(); /* Solve for x section*/
SubMain_f(); /*solve for diamond problems */
MmToM_f(); /* convert mm to m */
InchesToFeet_f(); /* convert inches to feet */
CelsiusToFahrenheit_f(); /* code from C++ book that converts cel to farh */
SqRoot_f();
Quadformula_f();
printf(&Please choose from one of the choices above\n&);
return 0;}
void Menu_f(){
printf(&\n\t\t Math Homework Helper Version 1.0 &);
printf(&\n 1. Solve For The X Value &);
printf(&\n 2. Simple Calculation &);
printf(&\n 3. Covert Millimeter To Meter&);
printf(&\n 4. Covert Feet To Inches &);
printf(&\n 5. Covert Celsius To fahrenhiet &);
printf(&\n 6. Find the square root of a number&);
printf(&\n 7. QUADRATIC FORMULA&);
printf(&\n 8. Exit&);
printf(&\n Choice:& );}void SubMain_f(){
system(&cls&); /* 执行系统命令:cls-清屏 */
printf( &==================MENU===============\n&);
printf( &1: Add two numbers\n&);
printf( &2: Subtract two numbers\n&);
printf( &3: Divide two numbers\n&);
printf(&4: Multiply two numbers\n&);
printf(&5: Back MainMenu\n&);
printf( &Choice: &);
scanf(& %c&, &chChoice);
printf(&=====================================\n&);
switch (chChoice)
CalcAdd_f();
CalcSub_f();
CalcDiv_f();
CalcMult_f();
printf(&Please choose from one of the choices above\n&);
}}void CalcAdd_f(){
printf(&The Add Function\n&);
printf( &First number: &);
scanf(&%d&, &nNumber1);
printf(&Second number: &);
scanf(&%d&, &nNumber2);
nResult=nNumber1+nNumber2;
printf(&%d +%d=%d\n&, nNumber1,
nNumber2, nResult);
printf( &Press any key to continue\n&);
getchar();
getchar();
SubMain_f();}void CalcSub_f(){
printf( &The Subtract Function\n&);
printf( &First number: &);
scanf(&%d&, &nNumber1);
printf( &Second number: &);
scanf(&%d&, &nNumber2);
nResult=nNumber1-nNumber2;
printf(&%d + %d = %d\n&, nNumber1,nNumber2 , nResult);
printf(&Press any key to continue\n&);
getchar();
getchar();
SubMain_f();}void CalcDiv_f(){
printf( &The Divide Function\n&);
printf( &First number: &);
scanf(&%d&, &nNumber1);
printf(&Second number: &);
scanf(&%d&, &nNumber2);
nResult= nNumber1/nNumber2;
printf(&%d / %d = %d\n &, nNumber1,
nNumber2 , nResult);
printf( &Press any key to continue\n&);
getchar();
getchar();
SubMain_f();}void CalcMult_f(){
printf(&The Multiply Function\n&);
printf( &First number: &);
scanf(&%d&, &nNumber1);
printf( &Second number: &);
scanf(&%d&, &nNumber2);
nResult=nNumber1*nNumber2;
printf(&%d * %d= %d\n&, nNumber1, nNumber2 , nResult);
printf( &Press any key to continue\n&);
getchar();
getchar();
SubMain_f();}
void SqRoot_f(){
printf(&The Square Root Function\n&);
printf( &First number: &);
scanf(&%d&,
&nNumber1);
nResult=sqrt(nNumber1);
printf( &The square root of %d is %d\n&, nNumber1, nResult);
printf( &Press any key to continue\n&);
getchar ();
Menu_f();}
void SolveForX_f(){
nCoef, nWholeNumber, nEqual, nX;
printf(&\nThis will run you through solving for x in the since that the&);
printf(&\nProgram reads like y = 2x + 3&);
printf(&\nOnly put in one number at a time then push enter&);
printf(&\nMore instructions will come after you put that number in and push enter\n\n&);
printf(&y = &);
scanf(&%d&, &nCoef);
printf(&%dx + &, nCoef);
scanf(&%d&, &nWholeNumber);
printf(&%dx + %d=&, nCoef,nWholeNumber);
scanf(&%d&, &nEqual);
nX = rand()%100;
if(((nCoef * nX) + nWholeNumber) == nEqual)
printf(&\nWe found out that x is equal to %d\n\n&, nX);
system(&PAUSE&);
void MmToM_f(){
double dlM
printf(&Enter the value in 'Millimeters': &);
scanf(&%lf&, &dlMilimeter);
if(dlMilimeter & 1000)
printf(&Way to low buddy. Number MUST be over 1000!!!\n&);
MmToM_f();
dlMeter = (dlMilimeter / 1000);
printf(&\nThe answer to your question is: %lf
meters\n\n&, dlMeter);}
void InchesToFeet_f(){
printf(&Enter the number of feet to get the length in inches: &);
scanf(&%f&, &flInch);
flFeet = 12 * flI
printf(&\n\nOh that is %f
feet\n\n&, flFeet);
system(&PAUSE&);}
void CelsiusToFahrenheit_f(){
printf( &Enter the temperature in Celsius:&);
scanf(&%d&, &nCelsius);
nFactor = 212 - 32;
nFahrenheit = nFactor * nCelsius/100 + 32;
printf( &Fahrenheit value is:%d\n&, nFahrenheit);}
Quadformula_f(){
int nCoefa, nCoefb, nC
float flHalfD
float flTopA;
float flTopB;
float flWholeA;
float flWholeB;
printf(&\nWhat is the value of a: &);
scanf(&%d&, &nCoefa);
printf(&\nWhat is the value of b: &);
scanf(&%d&,
printf(&\nWhat is the value of c: &);
scanf(&%d&, &nCoefc);
if (nCoefb & 0)
nCoefb +=(nCoefb * nCoefb);
nCoefb -=(nCoefb*nCoefb);
flHalfDone = sqrt( ( (nCoefb * nCoefb) - (4 * nCoefa * nCoefc ) ) );
flTopA = nCoefb + flHalfD
flTopB = nCoefb - flHalfD
flWholeA = flTopA / (2 * nCoefa);
flWholeB = flTopB / (2 * nCoefa);
printf(&X's Are %f , %f\n&, flWholeA , flWholeB);}
还可以进行解方程哦。。你复制代码的时候可别赋值多了其他无效的东西哦
你看这里多了个箭头,却掉它。
如果你不需要其他功能可以删除掉相应的函数。
刚用C++写好一个,你改编一下就好。#include&iomanip&#include&iostream&#include&cmath&#include&ctime&#include&conio.h&//////////////////////////////////////struct Jade{ Jade *};//////////////////////////////////////class Needle{ Jade * head,*public: Needle(){Set();} void Set(){bit=0;} void Start(void){
//生成头结点
head=new J
tail-&state=0; } void Create(char x){
//生成新节点,并将字符X放在该节点中
Jade * temp=new J
temp-&data=x;
temp-&next=0;
if((int)x&48){
if(x!=‘.‘)temp-&state=1;
else temp-&state=0;
else temp-&state=0;
tail-&next=
++ } void Charge(void){
//获得输入的字符并存入链表
while(cin.get(wmA)&&(int)wmA!=10)
if((int)wmA&39||(int)wmA==44||(int)wmA&57)
else Create(wmA);
} } void show(){
//输出存储的计算式
}while(p-&next);
} Jade * Share(){
//共享链表头指针; } int Check(){
//检查是否有0作为除数
if(bit==0)return 0;
Jade *king=
while(king-&next){
if(king-&data==‘/‘&&king-&next-&data==‘0‘)return 0;
king=king-&
return 1; } ~Needle(){
if(bit==0) exit(0);
while(head){
head=head-&
} }};///////////////////////////////////////////////struct Ball{ Ball * qian,*};///////////////////////////////////////////////class Think{ Ball * bhead,* Jade *public: Think(){rec=0;} void Check(){
拜托我要解释的,我菜鸟,看不懂
翻译文字、网页和文档 将英语译成中文显示拼音 #包括&iomanip& #包括&iostream& #包括&cmath& #包括&ctime& #包括&conio.h& 使用空间性病; ////////////////////////////////////// 结构玉( 廉政状况; char数据; 玉*下; ); ////////////////////////////////////// 类针( 玉*头,*尾巴;廉政位; 市民: 针()(设置();) 无效组()(位= 0;) 无效启动(无效)(/ /生成头结点 头=新玉; 尾=头; 尾“状态= 0; ) 无效创建(字符x)的(/ /生成新节点,并将字符X放在该节点中 玉*临时=新玉; 温度,“数据= X信息; 温度,“未来= 0; 如果((廉政)ד48)( 如果(X !='.')温度,“国家= 1; 其他温度,“国家= 0; ) 其他温度,“国家= 0; 尾“未来=温度; 尾=温度; + +位; ) 无效费(无效)(/ /获得输入的字符并存入链表 字符wmA; 启动(); 而(cin.get(wma)开始&&(廉政)wmA!= 10) ( 如果((廉政)wmA“39 | |(廉政)wmA == 44 | |(廉政)wmA”57) 继续; 否则创建(wma)开始; ) ) 无效的show()(/ /输出存储的计算式 玉* p =头; 做( p = p一“下; 法院“&p-&数据; ),而(对“下); ) 玉*分享()(/ /共享链表头指针; 返回头; ) 廉政检查()(/ /检查是否有0作为除数 如果(位== 0)返回0; 玉*国王=头; 而(国王“下)( 如果(国王“数据=='/'&&国王”下一代“数据== '0')返回0; 王=国王“下; ) 返回1; ) ?针()( 如果(位== 0)出口(0); 玉* 同时(头)( p =头; 头=头“下; 删除p; ) ) ); /////////////////////////////////////////////// 结构球( 廉政的感觉; 双倍数据传输; 字符字; 球*钱其琛,*厚; ); /////////////////////////////////////////////// 一流的思考( 球* bhead,* 玉*岁;廉政消遣; 市民: 想想()(市盈率= 0;) 无效检查()(
我想用栈这个方法应该是一个很好的方法,但我有一个想法就是用结构数组或结构链表
first_/*上一次输入的数*/
later_/*接着输入的数*/
/*操作符号为5个,(+,-,*,/,=)*/
我想应该可以,不过这样做好象很浪费空间和时间
思路很简单,根据输入的数据判断,用一个switch,分别处理加减乘除四种情况
可以再完善的,整个人性化的界面,具体代码网上也有,搜搜就行了
相关知识等待您来回答
编程领域专家
& &SOGOU - 京ICP证050897号

我要回帖

更多关于 易语言编写安卓软件 的文章

 

随机推荐