{eval=Array;=+count(Array);}
首先答案是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語言的來歷:
上世紀(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)了自舉。
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ù)
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。
首先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)行起來!
語言是規(guī)范,是沒有用什么語言寫出來的概念的。你問的應(yīng)該是語言的編譯器是用什么寫的。c編譯器有很多,這些編譯器根據(jù)發(fā)布時(shí)期不同,所用語言也有差異,早期用匯編,c成熟了用c語言自己,理論上任何語言都可以來做c編譯器的。
c程序需要編譯器編譯才能執(zhí)行 這個(gè)編譯器可以是用c語言寫的,但編譯器誰來編譯呢 這是雞和蛋的問題 ,所以,最早的c編譯器肯定不是c寫的了
最早最早的c編譯器(貝爾實(shí)驗(yàn)室階段)是用匯編寫的,之后的編譯器一般都是用c/c++編寫,并且用已有的舊版本編譯器來編譯新版本的源碼。
用C語言寫的代碼通過C語言的編譯器編譯成EXE,最早版本的C語言的編譯器是通過匯編語言寫的編譯器編譯出來的,最早版本的匯編語言編譯器是由機(jī)器語言寫的編譯器編譯出來的。舊版本的C語言編譯器可以用來編譯出新版本的編譯器程序。
我不回答這個(gè)問題,只是糾正一下這個(gè)問題本身。這個(gè)問題應(yīng)該這樣問:“C語言編譯器(compiler)是用什么語言來編程的?”
10
回答10
回答0
回答2
回答9
回答10
回答5
回答6
回答0
回答10
回答