{eval=Array;=+count(Array);}

国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

問答專欄Q & A COLUMN

C語言是用什么編出的?

tianren124tianren124 回答10 收藏1
收藏問題

10條回答

codeGoogle

codeGoogle

回答于2022-06-22 18:56

首先答案是c語言是用c語言編寫。



語言自舉性

一個(gè)語言能否自己編寫自己實(shí)現(xiàn)自己編譯,這叫自編譯,自舉性。目前能實(shí)現(xiàn)自舉性的語言沒有幾個(gè),而自舉性也就成了一個(gè)語言能否真實(shí)強(qiáng)大的標(biāo)志。

一般來說圖靈完備的語言,編譯型語言,虛擬機(jī)語言可以實(shí)現(xiàn)自舉。而解釋型語言基本上很難。



現(xiàn)代很多語言都沒實(shí)現(xiàn)自舉,Java(jvm),Javascript, python,ruby,lua,php,perl……一堆。這些語言編譯器、解釋器都是c語言。

一個(gè)語言能自舉是他們社區(qū)和開發(fā)一直夢寐以求的事情,也是他們情懷和追求所在。有一個(gè)語言為了實(shí)現(xiàn)自舉成功,花了近20年,前年圣誕節(jié)才正式推出了第一個(gè)正式版本。它就是perl6,perl的下一代語言。perl6支持過程、OO、函數(shù)式三種程模式,支持虛擬機(jī)的語言(自己的虛擬機(jī)和jvm)。為了做好perl6,社區(qū)搞了一個(gè)功能啟示錄,把要實(shí)現(xiàn)的功能好點(diǎn)子都錄進(jìn)去。后來一個(gè)日本人參考這個(gè)啟示錄自己實(shí)現(xiàn)了一個(gè)語言,這就有了ruby語言,但是ruby沒有自舉。



c語言的自舉過程和交叉編譯

我在以前的回答中,曾說過c語言的來歷:

上世紀(jì)70年代,為了實(shí)現(xiàn)unix,教主Tomphson和Ritchie開發(fā)了B語言,但是b語言性能不行,編寫也較繁瑣,所以又在B語言的基礎(chǔ)上開發(fā)出了現(xiàn)在的C語言。

第一個(gè)C語言編譯器的原型是用B語言或者混合B和匯編語言編寫的。采用部分實(shí)現(xiàn)功能,交叉編譯方式實(shí)現(xiàn)。

先用B和匯編語言編寫一個(gè)C語言的部分必須功能的編譯器,再通過這個(gè)編譯器,完成完整的C語言編譯器。詳細(xì)過程如下:

1、先編寫一個(gè)只有C語言最基本功能編譯器C0語言,用匯編語言編寫出C0的編譯器。

2、接著用C0實(shí)現(xiàn)比C0復(fù)雜,功能不完整的C語言子集C1語言,用C0編譯出C1語言的編譯器。

3、在C1-〉c2……如此循環(huán)直到Cn,Cn功能已經(jīng)強(qiáng)大到可以實(shí)現(xiàn)C。

4、用Cn編譯實(shí)現(xiàn)了第一個(gè)c語言編輯器,即C實(shí)現(xiàn)了自舉。

評論0 贊同0
  •  加載中...
Corwien

Corwien

回答于2022-06-22 18:56

C語言標(biāo)準(zhǔn)文檔是 pdf 格式的,你可以在這里下載 http://open-std.org/JTC1/SC22/WG14/www/docs/n1570.pdf 至于是什么編寫的,因?yàn)楹芏辔臋n編輯器都可以導(dǎo)出 pdf,這個(gè)還真不好猜測。。。


如果你說的是 C 語言編譯器是什么編寫的,當(dāng)今三大主流 C 語言編譯器都是使用 C++ 語言編寫的。

1. 首先是Windows平臺(tái)的 cl(全稱叫 Microsoft (R) C/C++ 優(yōu)化編譯器)。該編譯器是閉源的,但是從它的可執(zhí)行文件的導(dǎo)入符號可以看出它是用 C++ 語言編寫的,并極有可能就是用自身編譯的。

2. 然后是在Linux平臺(tái)廣泛使用的 gcc。gcc 編譯器(平臺(tái))最初是用 C 語言編寫的,但是在 2012 年 8 月,gcc 宣布全面遷移至 C++ 語言,所以現(xiàn)在都是使用 C++ 語言編寫了。

3. 最后是在BSD系(包括蘋果系統(tǒng))使用的 clang 編譯器,它屬于 LLVM 編譯器平臺(tái),從誕生第一天起就是使用 C++ 語言編寫的。


其他還有很多小眾編譯器,多數(shù)是使用 C 或 C++ 語言編寫(C 語言居多),由于數(shù)量眾多這里就不列舉了。


可以看到 cl 的引用了 C++ 語言編寫的函數(shù)

評論0 贊同0
  •  加載中...
Rango

Rango

回答于2022-06-22 18:56

C語言是用計(jì)算機(jī)編寫出來的,廣泛用于開發(fā),C語言的設(shè)計(jì)目標(biāo),是提供一種簡易的方式編譯,專門用來處理存儲(chǔ)器,產(chǎn)生少量的機(jī)器碼,不需要任何運(yùn)行環(huán)境的支配,便能運(yùn)行的一種編程語言,簡稱:C語言。c語言與C十十,Java,編程語言有所不同,主要有:dang,GCC,WlN一TC,SUBLlME,MSVC,TurboC。

評論0 贊同0
  •  加載中...
cuieney

cuieney

回答于2022-06-22 18:56

首先C語言是一門計(jì)算機(jī)編程語法規(guī)則規(guī)范,可以將C語言比做英語語言,我們在學(xué)習(xí)英語的時(shí)候都是先學(xué)語法 單詞之類的英語規(guī)則,在學(xué)會(huì)了語法以后我們就可以用英語寫出自己的文章,同樣的道理C語言也是如此,我們可以用C語言寫出自己的程序。

其次計(jì)算機(jī)并不認(rèn)識什么C語言,計(jì)算機(jī)只認(rèn)識數(shù)字0和1(硬件上是使用開關(guān)來表示,用數(shù)字0來代表低電平,數(shù)字1代表高電平),那怎么用0和1來描述十進(jìn)制整數(shù)?答案是二進(jìn)制。

再次我們的編寫的程序要能在計(jì)算機(jī)上實(shí)現(xiàn),首先要做的就是翻譯工作,將C語言編寫的程序(文本格式)翻譯成二進(jìn)制數(shù)字文本格式,

最后就是翻譯好的二進(jìn)制文件,如何讓計(jì)算機(jī)幫我們運(yùn)行呢?答案就是通過一種工具將我們編譯好的二進(jìn)制文件存儲(chǔ)到存儲(chǔ)器中,存儲(chǔ)器是啥呢?存儲(chǔ)器可以比作是一個(gè)有很多抽屜的柜子,比如二進(jìn)制文件開頭處是數(shù)字001,那么我們的工具就會(huì)在第三個(gè)抽屜放東西,前兩個(gè)抽屜為空,來代表001。

至此 我們的C語言程序就能夠在計(jì)算機(jī)上運(yùn)行起來!

評論0 贊同0
  •  加載中...
yy736044583

yy736044583

回答于2022-06-22 18:56

語言是規(guī)范,是沒有用什么語言寫出來的概念的。你問的應(yīng)該是語言的編譯器是用什么寫的。c編譯器有很多,這些編譯器根據(jù)發(fā)布時(shí)期不同,所用語言也有差異,早期用匯編,c成熟了用c語言自己,理論上任何語言都可以來做c編譯器的。

評論0 贊同0
  •  加載中...
Barrior

Barrior

回答于2022-06-22 18:56

c程序需要編譯器編譯才能執(zhí)行 這個(gè)編譯器可以是用c語言寫的,但編譯器誰來編譯呢 這是雞和蛋的問題 ,所以,最早的c編譯器肯定不是c寫的了

評論0 贊同0
  •  加載中...
yagami

yagami

回答于2022-06-22 18:56

最早最早的c編譯器(貝爾實(shí)驗(yàn)室階段)是用匯編寫的,之后的編譯器一般都是用c/c++編寫,并且用已有的舊版本編譯器來編譯新版本的源碼。

評論0 贊同0
  •  加載中...
ThreeWords

ThreeWords

回答于2022-06-22 18:56

用C語言寫的代碼通過C語言的編譯器編譯成EXE,最早版本的C語言的編譯器是通過匯編語言寫的編譯器編譯出來的,最早版本的匯編語言編譯器是由機(jī)器語言寫的編譯器編譯出來的。舊版本的C語言編譯器可以用來編譯出新版本的編譯器程序。

評論0 贊同0
  •  加載中...
codecraft

codecraft

回答于2022-06-22 18:56

我不回答這個(gè)問題,只是糾正一下這個(gè)問題本身。這個(gè)問題應(yīng)該這樣問:“C語言編譯器(compiler)是用什么語言來編程的?”

評論0 贊同0
  •  加載中...
JinB

JinB

回答于2022-06-22 18:56

c編譯器,c編譯器現(xiàn)在也是c寫的了。

評論0 贊同0
  •  加載中...

最新活動(dòng)

您已邀請0人回答 查看邀請

我的邀請列表

  • 擅長該話題
  • 回答過該話題
  • 我關(guān)注的人
向幫助了您的網(wǎng)友說句感謝的話吧!
付費(fèi)偷看金額在0.1-10元之間
<