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

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

問答專欄Q & A COLUMN

C語言是用什么編出的?

tianren124tianren124 回答10 收藏1
收藏問題

10條回答

codeGoogle

codeGoogle

回答于2022-06-22 18:56

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



語言自舉性

一個語言能否自己編寫自己實現自己編譯,這叫自編譯,自舉性。目前能實現自舉性的語言沒有幾個,而自舉性也就成了一個語言能否真實強大的標志。

一般來說圖靈完備的語言,編譯型語言,虛擬機語言可以實現自舉。而解釋型語言基本上很難。



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

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



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

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

上世紀70年代,為了實現unix,教主Tomphson和Ritchie開發了B語言,但是b語言性能不行,編寫也較繁瑣,所以又在B語言的基礎上開發出了現在的C語言。

第一個C語言編譯器的原型是用B語言或者混合B和匯編語言編寫的。采用部分實現功能,交叉編譯方式實現。

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

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

2、接著用C0實現比C0復雜,功能不完整的C語言子集C1語言,用C0編譯出C1語言的編譯器。

3、在C1-〉c2……如此循環直到Cn,Cn功能已經強大到可以實現C。

4、用Cn編譯實現了第一個c語言編輯器,即C實現了自舉。

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

Corwien

回答于2022-06-22 18:56

C語言標準文檔是 pdf 格式的,你可以在這里下載 http://open-std.org/JTC1/SC22/WG14/www/docs/n1570.pdf 至于是什么編寫的,因為很多文檔編輯器都可以導出 pdf,這個還真不好猜測。。。


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

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

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

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


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


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

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

Rango

回答于2022-06-22 18:56

C語言是用計算機編寫出來的,廣泛用于開發,C語言的設計目標,是提供一種簡易的方式編譯,專門用來處理存儲器,產生少量的機器碼,不需要任何運行環境的支配,便能運行的一種編程語言,簡稱:C語言。c語言與C十十,Java,編程語言有所不同,主要有:dang,GCC,WlN一TC,SUBLlME,MSVC,TurboC。

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

cuieney

回答于2022-06-22 18:56

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

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

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

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

至此 我們的C語言程序就能夠在計算機上運行起來!

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

yy736044583

回答于2022-06-22 18:56

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

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

Barrior

回答于2022-06-22 18:56

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

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

yagami

回答于2022-06-22 18:56

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

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

ThreeWords

回答于2022-06-22 18:56

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

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

codecraft

回答于2022-06-22 18:56

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

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

JinB

回答于2022-06-22 18:56

c編譯器,c編譯器現在也是c寫的了。

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

相關問題

最新活動

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

我的邀請列表

  • 擅長該話題
  • 回答過該話題
  • 我關注的人
向幫助了您的網友說句感謝的話吧!
付費偷看金額在0.1-10元之間
<