編譯結果是二進制嗎
① c語言採用解釋方式將源程序轉換為二進制的目標代碼嗎
不是,C語言採用編譯方式將源程序轉換為二進制的目標代碼。使用C語言編譯器來完成。
所謂C語言編譯器,就是把編程得到的文件,比如.c,.h的文件,進行讀取,並對內容進行分析棚兆運,按照C語言的規則,將其轉換成cpu可以執行的二進制文件。其本質在於對文件的讀入,分析,及處理。
C語言編寫的程序代碼稱為源程序,對於計算機本身來說,它並不能直接識別由高級語言編寫的程序。C語言程序經C語言編譯程序編譯後,生成後綴為.obj的二進制文件(稱為目標文猜納件)。
此.obj文件必須與系統提供的各種庫函數連接起來生成一個後綴為.exe的可執行文件才可以執行。C語言的可執行文件由一系列機器指令構成的。
(1)編譯結果是二進制嗎擴展閱讀
解釋執鏈梁行和編譯執行是計算機語言的執行方式。解釋執行由解釋器現場解釋執行,不生成目標程序。如BASIC便是解釋執行,一般解釋執行效率較低,低於編譯執行。
編譯執行由編譯程序將目標代碼一次性編譯成目標程序,再由機器運行目標程序。如:PASCAL,C,C++,delphi等語言。效率高於解釋執行。
② 請問c語言的源程序被編譯後的代碼是機器碼嗎
首先語言和被編譯成的代碼沒有直接關系。有把Java編譯成機器碼的編譯器也有把C語言編譯成Java位元組碼的編譯器。
機器碼只是CPU直接認讀的編碼,不等於和硬體打交道的。操作硬體是你通過程序操作CPU做到的。操作系統只不過是別人寫的程序而已,說到底還是程序。
③ 一個C#問題
Bin 目錄用來存放編譯的結果,bin是二進制binrary的英文縮寫,因為最初C編譯的程序文件都是二進制文件,它有Debug和Release兩個版本,分別對應的文件夾為bin/Debug和bin/Release,這個文件夾是默認的輸出路徑,我們可以通過:項目屬性—>配置屬性—>輸出路徑來修改。
obj是object的縮寫,用於存放編譯過程中生成的中間臨時文件。其中都有debug和release兩個子目錄,分別對應調試版本和發行版本,在.NET中,編譯是分模塊進行的,編譯整個完成後會合並為一個.DLL或.EXE保存到bin目錄下。因為每次編譯時默認都是採用增量編譯,即只重新編譯改變了的模塊,obj保存每個模塊的編譯結果,用來加快編譯速度。是否採用增量編譯,可以通過:項目屬性—>配置屬性—>高級—>增量編譯來設置。
Properties文件夾 定義你程序集的屬性 項目屬性文件夾 一般只有一個 AssemblyInfo.cs 類文件,用於保存程序集的信息,如名稱,版本等,這些信息一般與項目屬性面板中的數據對應,不需要手動編寫。
.cs 類文件。源代碼都寫在這里,主要就看這里的代碼。
.resx 資源文件,一些資源存放在這里,一般不需要看。
.csproj C#項目文件,用VS打開這個文件就可以直接打開這個項目,自動生成,不需要看。
.csproj.user 是一個配置文件,自動生成的,會記錄項目生成路徑、項目啟動程序等信息。也不需要看。
.Designer.cs 設計文件歷橘,自動生成,不需要看。
.aspx 是肢盯團網頁文件,HTML代碼寫在這裡面。
sln:在開發環境中使用的解決方案文件。它將一個或多個項目的所有元素組織到單個的解決方案中。此文件存儲在父項目目錄中.解決方案文件,他是一個或多個.proj(項目)的集合
*.sln:(Visual Studio.Solution) 通過為環境提供對項目、項目項和解決方案項在磁碟上位置的引用,可將它們組織到解決方案中。
比如是生則舉成Debug模式,還是Release模式,是通用CPU還是專用的等.
④ python需要編譯么
一個經常聽見的問題,那就是:Python是解釋型的語言嗎?它會被編譯嗎?這個問題沒有想像中那麼好回答。和很多人認識世界一樣,習慣以一個簡單的模型去評判一些事物。而事實上,裡麵包含了很多很多的細節。
通常的說法,編譯代表著將一個高級語言轉化為 CPU 能執行的機器碼。當你編譯 C 的時候,的確是做的這樣的操作。編譯的結果是一個二進制可執行文件,這時你的系統可直接運行這個程序。
與此相對的,解釋的意思是這樣的:程序運行時每次讀源文件中的一行代碼,並執行相應的操作,就這樣一行一行的重復下去。當然,所謂的腳本語言就是這么運行的。
但事實上,上面的定義有太多的局限。一門真正的語言,為了擁有更多有用和強大的特性,通常採用了各種各樣的實現方式。我們可以將編譯理解為更通用一些:將一種語言轉化為另一種語言形式。通常來說,源語言比目標語言要更高級一些,比如將 C 轉化為機器碼。當然,JavaScript 8 到 JavaScript 5 的轉化也算是一種編譯。
在Python中,源代碼會被編譯為更低級的一種形式,我們稱之為位元組碼。位元組碼是一串指令,和 CPU 的指令集類似。但是位元組碼並不直接被 CPU 執行,而是在虛擬機中執行的。當然,這里的虛擬機並不模仿整個操作系統的環境,只是提供了位元組碼執行的一個環境。
下面我們看 Python 的一小段代碼以及它對應的位元組碼
看了位元組碼的內容後,我們就知道 f'...' 這種格式化字元串的形式的運行原理,就是將裡面的字元串轉化為一系列的字面字元串與變數,然後使用 + 號連接起來。
dis 是 Python 標准庫中反匯編模塊,它可以展示 Python 代碼的位元組碼信息。上面提到的執行位元組碼的虛擬機,可以用任意的語言實現,包括 Python 自己。有興趣的可以去 GitHub 上看下這個項目 nedbat/byterun 。這個項目可以用來學習,但不適用於生產環境。
不過,我們運行 Python 時完全感受不到它的編譯過程,沒有顯示的調用什麼編譯程序,僅僅是簡單的執行 .py 文件,編譯都是需要時自動編譯的。這和 JAVA 不同,當你每次寫完 JAVA 代碼要執行時,都要手動將其編譯為 .class 文件,然後執行。也正是這個原因,JAVA 被稱為編譯型語言,而 Python 被叫做解釋型語言。但事實上,兩種語言執行時都會先編譯成位元組碼,然後交給虛擬機執行。
Python還有一個重要的特性,就是互動式命令行。你可以敲入一行 Python 語句,然後立刻回車執行。實際上,即使是這個過程,Python 同樣是先轉為位元組碼,然後執行。而這個互動式命令行這個特性,在很多編譯型語言里是沒有的。同樣因為沒有顯示的調用編譯程序,很多人將執行Python源文件的程序叫做Python解釋器。
即使比較簡略,但還是補充下。部分編譯型語言比如 C 或者 JAVA 也有互動式命令行,但這些並不是這些語言的重心。JAVA 剛開始是編譯成位元組碼然後執行,後面有了即時編譯技術( JIT )可以直接編譯成機器碼,與 C 類似。
從上面的描述可以看出,不管是解釋還是編譯,並沒法完全分離開來。很多時候,我們想用一些詞將現有的編程語言分個類,但事實上要辦到這一點太難了。
最後要說明的是,你的代碼是怎麼執行的只是語言的實現問題,並非語言的特徵。上文中,我們討論的是 Python ,但實際上是 CPython 的描述。CPython 是一個解釋器,之所以這么叫,是因為這個解釋器是用 C 編寫的,這也是 Python 默認的解釋器。當然還有其它很多解釋器,比如,PyPy 就是另一種解釋器,使用了 JIT 技術,運行速度相比 CPython 有較大提升。
回到標題中的問題,Python之所以稱為解釋型語言,是因為它沒有顯示的調用編譯操作,表現出解釋型的特性比較多而已。但事實上,編譯是存在的,具體怎麼編譯就看語言的實現了,也就是解釋器的設計。
更多Python相關技術文章,請訪問Python教程欄目進行學習!以上就是小編分享的關於python需要編譯么的詳細內容希望對大家有所幫助,更多有關python教程請關注環球青藤其它相關文章!
⑤ c語言是如何編譯成二進制
計算機專業有門課程叫做《編譯原理》,詳細講述了怎麼把高級語言翻譯成匯編語言活著機器能看懂的二進制代碼。
簡單的說,C語言是通過編譯器翻譯成二進制代碼的(就像英譯漢的軟體把英文翻譯成漢語一樣。把高級語言翻譯成機器語言過程很復雜,學了編譯原理就懂了)。還有編譯器可以用各種語言編寫,C語言可以被用C語言寫的編譯器來編譯。
⑥ 編譯程序是直接執行源程序嗎
編譯程序一般不是執行源程序,而是把我們寫的文字型的代碼編譯為二進制的內容,然後去執行二進制的內容。
有些編程語言是需要編譯的必須先編譯在執行,而有些是腳本型的,則直接運行源程序就可以。
⑦ 在用vc進行c語言編程時所謂的編譯是不是把自己打的c語言代碼轉換成二進制的數字
可以這么理解。
編譯的過程就是把人能讀懂的東西,變成人讀不懂的東西,但是計算機能讀懂的。
這些目標文件,如果人來看,就是一堆的二進制數字,參考黑客帝國 ;D
可是在計算機眼裡,他們就不一樣了,有些是指令,有些是數據。
⑧ C語言如何編譯成可以直接在CPU運行的二進制碼
路過。。。話說你要二進制文件幹啥呢,我的大學老師告訴我,懂二進制的全世界就只有那麼幾個