編譯器
本身就是一個應用程序,編譯器涉及到底層的一些操作,對執行要求比較高的地方使用匯編語言編寫的,主要的還是用C語言來編寫實現的,在Java的安裝路徑下的bin目錄下有很多的*.exe可執行文件,像jar.exe、javac.exe、java.exe等等,Java編譯器這東西它好像不是開源的,如果你對編譯器的實現感興趣的話,推薦你看一本《
編譯原理
》這本書,這本書對你了解編譯器的實現原理有很大的幫助的。
② VC如何用編譯器將自己的源代碼轉換成目標軟體,可以執行打開的軟體,編譯成exe文件是所有文件編譯的結果
至於生成什麼文件應該看樓主需要進行設置,一般默認都會生成.EXE文件,
首先先從文件說吧,不管什麼格式都是一個文件,裡面都是數字也就是代碼,而我們在軟體里常用的文件格式一般是頭文件(.h .hpp以h開頭等),代碼實現文件(.c .cpp等),裡面裝的也就是程序代碼。
Windows(一般用VC寫的程序)程序分為 程序代碼 和 UI(User Interface用戶介面)資源 兩大部分,兩部份最後以RC編譯器整合為一個完整的EXE 文件。
所謂UI 資源是指功能菜單、對話框外貌、程序圖標、游標形狀、圖片等等東西。這些UI 資源的實際內容(二進制代碼)系藉助各種工具產生,並以各種擴展名存在,如.ico、.bmp、.cur 等等,這需要樓主在VC的資源(RC)編輯器里去搞,
過程就是,你點擊運行時,首先C編譯器編譯(所有的,當然會有先後順序這要看編譯器了).cpp文件並(.h 不會編譯不然就不要#include了~~)生成.OBJ文件(其中進行語法檢查,轉換成匯編,再轉換成二進制代碼等);提示一下,如果你在VC中有圖片呀,按鈕呀之類的是RC編譯器在你添加後自動做好的文件,它就是以圖形的形式顯示給你看而已,在C編譯的同時RC編譯器將這些圖片呀之類的搞成一個.RES的文件,再之後就是連接了,連接器把.OBJ .RES再弄成.EXE文件,
其實樓主先把這些比較核心和基礎的搞懂就OK了,希望樓主是VC界一代新秀啊~~~~~~
③ 源碼怎麼編譯
使用編譯器如VC++6.0,VC++2008
④ 如何用編譯器將自己的源代碼轉換成目標代碼
我們使用編譯器將自己的源代碼轉換成目標代碼, 使用鏈接器將我們的目標代碼鏈接成一個可執行程序。另外, 我們使用一些程序在計算機中輸入源代碼文本並且編輯它。這些是最初的和最重要的工具, 它們構成程序員的工具集合或「程序開發環境」。 如果你使用的是命令行窗口, 就像很多專業程序員所做的那樣, 你將不得不自己來編寫編譯和鏈接命令。如果你使用IDE(「互動式開發環境」或「集成式開發環境」), 就像很多程序員所做的那樣, 簡單地點擊正確按鈕就可以完成這個工作。附錄C介紹了如何在你的C++實現中編譯和鏈接。 IDE通常包括一個具有有用特性的編輯器, 例如用不同顏色的代碼來區分你的源代碼中的注釋、 關鍵字和其他部分, 以及其他幫助你來調試代碼、 編譯和運行代碼的功能。調試是發現程序中的錯誤和排除錯誤的活動, 你在前進的道路上會聽到很多有關它的內容。 我們使用微軟的Visual C++作?喑炭 ⒒肪呈道 H綣 頤羌虻サ廝怠氨嘁肫鰲被蚴恰癐DE」的某些部分, 那就是所指Visual C++系統。但是, 你可以使用一些提供最新的、 符合標準的C++實現的系統。我們所說的大多數內容(經過微小的修改)對所有的C++實現都將是正確的, 並且其代碼可以在任何地方運行。在工作中, 我們使用幾種不同的實現。
⑤ 可否談一下C++編譯器大致是如何把C++源代碼編譯成目標代碼的
大致分成以下幾個階段:並以以Linux下的GCC編譯器舉例
第一階段:預處理,這個階段處理宏等
第二階段:編譯,包括語法檢查,頭文件檢查等
g++ -c name.o name.cpp name.h 生成目標文件
第三階段:鏈接,包括靜態鏈接與動態鏈接
g++ -o name name.o 生成匯編文件,可以直接運行
⑥ Java程序源碼保存時使用GBK編碼保存,編譯成位元組碼文件時編譯器是不是需要使用GBK解碼後再編譯呢
JavaC可以有選項指定源文件編碼,不對的話會出錯或亂碼
⑦ C#源代碼編譯成為本地代碼的編譯過程
很有興趣的話,可以去閱讀下JeffreyRitchie的《ClrviaC#》,目前出到第三版,英文好的話強烈推薦看英文版的,而且我有該電子書和實體書。
下面講下我的理解:大致上不會出什麼差錯的,細節部分你可以參照上面的書籍!
1.首先,c#源碼經過c#編譯器被編譯成託管模塊(IL中間代碼、元數據(Metadata))
2.然後,使用C#編譯器以及程序集鏈接器(AssemblyLinker----AL.exe)將上述託管模塊以及項目的資源文件Combine(整合)成一個程序集(Assembly)
上述程序集就是你所看到的exe文件或者dll文件等等,程序集中包含了manifest描述文件,是該程序集內容以及關系的一個清單,具體的內容你可以參見JR的書跟Java中的類似!
雙擊該exe運行的時候:
3.最後,運行時,CLR裝載對應的程序集,使用內部的三個即時編譯器(常用的為JIT),再去根據本機的環境去進行相應的優化(針對CPU優化等等),即時的翻譯成本地機器指令去執行。
還有一個本地化代碼生成工具,NGen.exe~~
這個最好能去看看那本JR的神作!細節不是我三言兩語能講清的~~
⑧ 編譯器 是如何讓源代碼生成文件的
要知道...電腦看的東西跟人看的東西是不一樣的
電腦看得明白的就只有1跟0
編譯器就是以一個人可以看得明白的環境下
讓人寫出可以翻譯成電腦看得明白的東西
再把那東西變成0跟1的工具
要不用編譯器也可以
不過你就要懂電腦的語言才可以
一個比較容易明白的例子
你是中國人, 只會說中文
對著一個只會說英文的英國人
你怎說他也不會明白
除非, 你們中間有一個人可以把中文翻譯成英文跟把英文翻譯成中文
這樣才可以溝通
不然唯一的方法就是你去學英文
因為現在是你要跟那英國人說話, 對方可沒東西跟你說
----------------------------------------------------------
我是說編譯器出了將源代碼翻譯成2進刺外還添加了什麼菜形成了文件這個找的到得實體
->當然會有些所謂的header..不過那些不重要
它生成文件時是不是還添加了什麼實體生成代碼
->跟上面的回答一樣, 不過內容基本上都是你寫的東西
文件是不是將這些代碼和在一起再起了個名字這么簡單呢?
->這樣想也可以...不過名字其實也是你自己起的....
但是即使是這樣它又用什麼代碼將這些代碼和成的呢?
->就是根據所謂的syntext去作為一程規定, 去把交字變成binary
要不然我直接在文本文檔里寫機器碼問什麼不能運行呢?
->可以, 不過你要肯定你打出來的東西不是文字的0跟1, 而是在binary層面上的0跟1
--------------------------------------------------
我還想問一下什麼叫文件?
->開得到 看得到的都可以叫成文件(資料夾除外)
文件時怎樣生成的它問什麼能自動在硬碟上佔用一定的空間 機器碼與文件有哪些區別呢?
->如果你以0和1的角度來看, 文件其實也是一堆機器碼, 只是這堆機器碼所代表的是文字(或其他東西, 例: 圖) 而不是可以執行的程式
文件到底是怎樣的集成機制
->也是0跟1
還有header是什麼意思
->一般就是用來宣告是用哪程語言寫出來的/由哪裡開始執行, 類似這樣的東西, 不過真的不重要(在寫程式的層面上)
⑨ 編譯程序把源代碼編譯為的目標代碼是什麼代碼是不是匯編
這個問題比較復雜,其實來說,編譯器可以翻譯高級語言為任何低級語言或機器語言。像JAVA,.NET的編譯器是編譯結果是中間代碼(可以理解為一種低級語言),由相應解釋器執行;像C之類的編譯以後可以是根據不同平台相應的機器碼,就是01組成的編碼,由對應平台的計算機直接執行;除此以外,gcc等也可以將C編譯為匯編輸出!
建議學習《編譯原理》這門課程,你會有更深的理解。