當前位置:首頁 » 編程軟體 » 沒有編譯器能運行c程序嗎

沒有編譯器能運行c程序嗎

發布時間: 2025-07-04 09:54:38

c語言這么厲害,它自身又是用什麼語言寫的編寫過程被稱為自舉

來自一個小白的提問: 「C語言本身用什麼語言寫的?」

換個角度來問,其實是:C語言在運行之前,得編譯才行,那C語言的編譯器從哪裡來?用什麼語言來寫的?如果是用C語言本身來寫的,到底是先有蛋還是先有雞?

我們假設世界上不存在任何編譯器, 先從機器語言說起,看看怎麼辦。

機器語言可以直接被CPU執行,不需要編譯器。

然後是匯編語言, 匯編語言雖然只是機器語言的助記符,但是也需要編譯成機器語言才能執行,沒辦法只能用機器語言來寫這第一個編譯器了(以後就不用了)。

匯編語言的問題解決了,就往前邁進了一大步,這時候就可以用匯編語言去寫C語言的編譯器,我們說這是C編譯器的老祖宗。

有了這個老祖宗,就可以編譯任意的C語言程序了,那是不是可以用C語言本身寫一個編譯器?只要用老祖宗編譯一下就可以了。

OK, 這么一層層上來,終於得到了一個用C語言寫的編譯器, 真是夠麻煩的。

到這個時候,之前那個匯編寫的C語言編譯器就可以拋棄了。

當然,如果在C語言之前,已經出現了別的高級語言,例如Pascal,那就可以用Pascal來寫一個C語言的編譯器。

第一個Pascal的編譯器據說使用Fortran寫的。而作為第一個高級語言的Fortran,它的編譯器應該是匯編語言寫的。

關於編譯器,這里邊有個有趣的傳說:

傳說Unix 發明人之一的 Ken Thompson在貝爾實驗室,大搖大擺的走到任何一台Unix機器前,輸入自己的用戶名和密碼,就能以root的方式登錄!

貝爾實驗室人才濟濟,另外一些大牛發誓要把這個漏洞找出來,他們通讀了Unix的C源碼,終於找到了登錄的後門, 清理後門以後編譯Unix , 運行, 可是Thompson 還是能夠登錄進去。

有人覺得可能是編譯器中有問題,在編譯Unix的時候植入了後門, 於是他們又用C語言重新寫了一個編譯器,用新的編譯器再次編譯了Unix, 這下總算天下太平了吧。

可是仍然不管用, Thompson 依然可以用root登錄,真是讓人崩潰!

後來Thompson 本人解開了秘密,是第一個C 語言編譯器有問題, 這個編譯器在編譯Unix源碼的時候,當然會植入後門, 這還不夠,更牛的是,如果你用C 語言寫了一個新編譯器,肯定也需要編譯成二進制代碼啊,用什麼來編譯,只有用Thompson寫的那第一個編譯器來編譯,好了, 你寫的這個編譯器就會被污染了,你的編譯器再去編譯Unix , 也會植入後門 :-)

說到這里我就想起了幾年前的XcodeGhost 事件,簡單來說就是在Xcode(非官方渠道下載的)中植入了木馬,這樣XCode編譯出的ios app都被污染了,這些app就可以被黑客利用做非法之事。

雖然這個XCodeGhost和Thompson的後面相比差得遠,但是提醒我們,下載軟體的時候要走正規渠道,從官方網站下載,認准網站的HTTPS標准,甚至可以驗證一下checksum。

可能有人問:我用匯編寫一段Hello World都很麻煩,居然有人可以用它寫復雜的編譯器?這可能嗎?

當然可能,在開發第一代Unix的時候,連C語言都沒有, Ken Thompson 和 Dennis Ritchie 可是用匯編一行行把Unix敲出來的。 WPS第一版是求伯君用匯編寫出來的, Turbo Pascal 的編譯器也是Anders 用匯編寫出來的,大神們的能力不是普通人能想像得到的。

對於編譯器來說,還可以採用「滾雪球」的方式來開發:

還是以C語言為例,第一個版本可以先選擇C語言的一個子集,例如只支持基本的數據類型,流程式控制制語句,函數調用...... 我們把這個子集稱為C0。

然後用匯編語言寫個編譯器,只搞定這個語言的子集C0,這樣寫起來就容易不少。

C0這個語言可以工作了,然後我們擴展這個子集,例如添加struct,指針...... ,把新的語言稱為C1。

那C1這個語言的編譯器由誰來寫? 自然是C0。

等到C1可以工作了,再次擴展語言特性,用C1寫編譯器,得到C2。

然後是C3, C4...... 最後得到完整的C語言。

這個過程被稱為bootstraping , 中文叫做自舉。

對於熱愛編程的人來說,有一群一起學習一起解答的小夥伴很重要!

這里有一個 C/C++編程學習交流俱樂部 (群),私信我【01】進入!

還有編程學習文件(源碼,零基礎教程,項目實戰教學視頻),歡迎初學者和正在進階中的小夥伴們!

Ⅱ 手機如何運行c需要代碼

手機如何運行C需要代碼
手機已經成為現代人生活中必不可少的工具,除了常規的通訊功能外,我們還可以在手機上運行應用程序,其中包括使用 C 語言編寫的應用程序。但是,為了讓手機能夠運行C程序,我們需要一些必要的代碼。

1. 安裝 C 語言編譯器
在 Windows 或者 Linux 上編寫 C 代碼時,我們需要安裝 C 語言編譯器,以將代碼編譯成可執行程序。同樣地,在手機上運行 C 代碼時,我們也需要安裝 C 語言編譯器。

對於 Android 系統的手機,我們可以通過安裝 Termux 應用程序來獲得命令行環境。在 Termux 中,我們可以使用命令:

pkg install clang

來安裝 C 語言編譯器。

2. 編寫 C 代碼
安裝好 C 語言編譯器之後,我們就可以在手機上編寫 C 代碼了。在 Termux 中,可以使用 Vim 或者 Nano編輯器來編輯 C 代碼文件。例如,我們可以使用以下命令創建一個名為 test.c 的 C 代碼文件:

touch test.c

nano test.c

在這個文件中,我們可以編寫任何 C 代碼,例如:

#include

int main() {

printf(\"Hello, World!\");

return 0;

}

在這個示例中,我們編寫了一個簡單的 C 程序,輸出 \"Hello, World!\"。編寫完畢後,我們需要將代碼保存到 test.c 文件中。

3. 編譯 C 代碼
當我們編寫好 C 代碼後,下一步就是將代碼編譯成可執行程序。在 Termux 中,我們可以通過以下命令來編譯 test.c:

clang test.c -o test

在這個命令中,我們使用 clang 編譯器將 test.c 編譯成可執行文件 test。如果編譯成功,我們可以通過以下命令在手機上運行 test 可執行文件:

./test

在 Termux 中,我們也可以使用 Makefile 來編譯和運行 C 代碼。

4. 上傳和下載 C 代碼
在手機上編寫 C 代碼時,我們有時需要將代碼上傳到其他設備中,或者將其他設備中的代碼下載到手機中。在 Termux 中,我們可以使用 SCP 命令來實現代碼的上傳和下載。

例如,如果我們想將當前目錄下的 test.c 文件上傳到遠程主機的 /home/user 目錄下,可以使用以下命令:

scp test.c user@remote:/home/user

在這個命令中,我們使用 SCP 命令將 test.c 文件上傳到遠程主機。

同樣地,如果我們想將遠程主機上的 /home/user/test.c 文件下載到當前目錄下,可以使用以下命令:

scp user@remote:/home/user/test.c .

在這個命令中,我們使用 SCP 命令將遠程主機上的 test.c 文件下載到當前目錄下。

總結
在手機上運行 C 程序可能是一個有趣的挑戰,但是如果你想讓它變得更加簡單和高效,你可以按照本文介紹的方法來完成。通過安裝 C 語言編譯器、編寫 C 代碼、編譯 C 代碼、上傳和下載 C 代碼,我們可以在手機上運行 C 程序,讓我們的生活更加豐富多彩。

Ⅲ Linux下如何編譯,運行C程序需要安裝編譯器嗎

首先一定要安裝 gcc (或者 cc )編譯器。然後在 Linux 系統下,首先使用 vi 全屏幕編輯程序編輯一個後綴名為 .c 的文件,然後使用 gcc 編譯器對你的 C 語言源程序進行編譯、連接。最後才能夠運行生成後的運行文件(如果你的源程序沒有任何編譯錯誤的話)。當然了,在 gcc 的編譯過程中,會有很多選擇項。這個就是靠編程經驗了。

舉例如下:
gcc test.c -o myrunfile ( -o 選項指定輸出的運行文件名為:myrunfile,如果不指定 -o 選項的話,預設的運行文件名為:a.out)

Ⅳ 怎麼運行c語言程序

在Mac或Linux系統上運行C語言程序,可以按照以下步驟進行

  1. 創建C語言源文件

    • 創建一個文件,命名為main.c。
    • 使用文本編輯器打開main.c文件。
    • 在文件中輸入C語言代碼,例如:“`c#include

    int main { printf; return 0; } “2. **安裝GCC編譯器**: 如果系統上未安裝GCC編譯器,需要通過包管理器進行安裝。 在Mac上,可以使用Homebrew安裝GCC:brew install gcc。 在Linux上,根據發行版使用不同的命令安裝GCC: 對於基於Debian的系統,使用:sudo aptget install gcc。 對於基於RPM的系統,使用:sudo yum install gcc。3. **編譯C語言程序**: 打開終端。 導航到包含main.c文件的目錄。 使用GCC編譯程序:gcc main.c。這將生成一個可執行文件,默認名為a.out或可以通過o選項指定輸出文件名。4. **運行編譯後的程序**: 在終端中,輸入./a.out。 如果指定了輸出文件名,例如使用gcc main.c o myprogram,則運行./myprogram`。注意:以上步驟適用於Mac和大多數Linux發行版。在Windows上運行C語言程序通常需要安裝額外的編譯器和IDE。

熱點內容
蘋果7鎖屏密碼怎麼改 發布:2025-07-04 14:04:44 瀏覽:710
P三零是什麼配置 發布:2025-07-04 13:58:41 瀏覽:361
哪個安卓機有長方形home鍵 發布:2025-07-04 13:43:58 瀏覽:861
android腳本錄制 發布:2025-07-04 13:17:47 瀏覽:342
嵌入式和安卓哪個硬體成本高 發布:2025-07-04 13:05:56 瀏覽:229
360代理伺服器怎麼設置 發布:2025-07-04 12:49:49 瀏覽:515
iphone在哪清除緩存 發布:2025-07-04 12:49:38 瀏覽:340
代理訪問網址 發布:2025-07-04 12:47:50 瀏覽:400
分頁存儲的管理方式 發布:2025-07-04 12:47:45 瀏覽:495
linux與windows路徑 發布:2025-07-04 12:41:42 瀏覽:461