當前位置:首頁 » 編程軟體 » 代碼編譯工具

代碼編譯工具

發布時間: 2022-01-22 04:38:55

1. 如何自己編譯源代碼

我們使用編譯器將自己的源代碼轉換成目標代碼, 使用鏈接器將我們的目標代碼鏈接成一個可執行程序。另外, 我們使用一些程序在計算機中輸入源代碼文本並且編輯它。這些是最初的和最重要的工具, 它們構成程序員的工具集合或「程序開發環境」。 如果你使用的是命令行窗口, 就像很多專業程序員所做的那樣, 你將不得不自己來編寫編譯和鏈接命令。如果你使用IDE(「互動式開發環境」或「集成式開發環境」), 就像很多程序員所做的那樣, 簡單地點擊正確按鈕就可以完成這個工作。附錄C介紹了如何在你的C++實現中編譯和鏈接。 IDE通常包括一個具有有用特性的編輯器, 例如用不同顏色的代碼來區分你的源代碼中的注釋、 關鍵字和其他部分, 以及其他幫助你來調試代碼、 編譯和運行代碼的功能。調試是發現程序中的錯誤和排除錯誤的活動, 你在前進的道路上會聽到很多有關它的內容。 我們使用微軟的Visual C++作?喑炭 ⒒肪呈道 H綣 頤羌虻サ廝怠氨嘁肫鰲被蚴恰癐DE」的某些部分, 那就是所指Visual C++系統。但是, 你可以使用一些提供最新的、 符合標準的C++實現的系統。我們所說的大多數內容(經過微小的修改)對所有的C++實現都將是正確的, 並且其代碼可以在任何地方運行。在工作中, 我們使用幾種不同的實現。

2. 代碼編輯軟體有哪些

編輯代碼大部分是在集成開發環境中的就是IDE.
所以常用的有
VC6.0,另外可以使用輔助插件Visual Assist
VS系列也是可以的,主要是看個人喜好。
當然越新的,它支持的庫文件就越新。
如果初學C,
會接觸
TC系列。
另外現在還有
.net, vc7,C++ builder.
如果單個的代碼編輯軟體,不是集成開發環境的

Source Insight
Ultra Edit
Visual Slick Edit
Edit Studio
Edit Plus
等。
其實主要自己習慣用那個就好。

3. 編譯工具是如何開發的例如VC6等

樓主大概想問先有雞,還是先有蛋吧。

計算機能識別的語言叫機器語言,最初的程序就是用機器語言寫的,
也就是直接在鍵盤敲0和1,它不要編譯,直接就能運行。

後來用機器語言寫了一個簡單匯編編譯器,
用它處理匯編語言,再用匯編語言寫一個簡單的c語言編譯器,功能非常有限那種,之後用這個編譯器能處理的C語言重寫這個C編譯器,這樣就變成可以用C編譯器編譯新版本的C編譯器了。

這只是一個大概的過程。

4. 什麼代碼編輯器比較好用

著名的代碼編輯器:Microsoft Visual Studio Code、Github Atom、Sublime text、Adobe Brackets

最推薦的一種:Atom

推薦理由:

鏈接:如何評價 GitHub 發布的文本編輯器 Atom?

作者:韋易笑

用過不少編輯器:UltraEdit / EditPlus / (G) Vim / GEdit / NotePad++ / TextMate / ProgrammerPad / Sublime 。確實是工作上用他們寫過代碼的。而 VSC / Emacs 只是體驗了一下基本使用方法,算不上真用。用下來的結論是:Atom 比 Vim 更 Vim,比 Emacs 更 Emacs,同樣,比 Sublime 更 Sublime。


Atom 唯一的槽點就是「卡」,不過那是去年的情況了,1.0後性能數次大提升,比起sublime/vsc之類雖不算流暢,但同時編輯20個數千行的文件沒有壓力。如今讓人感覺慢的地方主要是啟動loading(也大大短於eclipse, idea),使用時並沒察覺它比其他編輯器慢再哪。而文本編輯器的快慢,更重要的是「讓你工作更快更有效率」。下面說說為何 Atom比其他更有效率:


兼容VIM模式


這無疑團結了一大班 Vim過來的用戶,Sublime雖然也有VIM模式,但是Sublime在 mac下面的vim模式有bug,我習慣用 hjkl來移動游標,sublime再mac下hjkl移動有問題,且我習慣CTRL_[來返回NORMAL,手指不離開主鍵盤區,而sublime的vim模式只支持ESC返回,加上其作者經常神秘消失,最穩定的2.x版本已三年沒有更新,這些問題一直得不到修正。


由於Atom的定製程度直追 Vim/Emacs,它的vim模式能夠使用插件來實現,而不像sublime必須builtin,Atom的VIM模式除了官方實現外還有很多用戶實現,各有所長,你不喜歡可以換,Sublime就傻逼了,覺得builtin的不行,你就沒辦法了,而且作者不更新你也沒辦法。


Atom里的Vim模式並不是強制的,你可以用也可以不用,這樣入門用戶也不會覺得困難,但是如果你用慣Vim的話,使用Vim模式可以取得更好的效率,我覺得Vim/Atom-VimMode能夠提升效率的地方有以下三方面:


1. 手指不離開主鍵盤區:

所有功能皆能在主鍵盤區完成,不用去按方向鍵,不用把手挪去按Home/End,更不用動滑鼠。就像詠春中強調中線理論,認為一切動作圍繞中軸線開展,守護自己中軸線的同時攻擊別人的中軸線。Vim/Atom-VimMode中,雙手不但從不離開主鍵盤,並且八根手指隨時守護再HOME位(ASDF, JKL;)有動作就移動,然後馬上歸位。


2. 細粒度微操作:

星際/dota玩的好,微操基本功,微操又快又精確,Vim/Atom-VimMode一樣,比如:

if (xxxx) {}

很多人編碼時習慣「成對編碼」,寫了申請資源的代碼,先把釋放資源寫了,寫了左括弧,先把右括弧給補充完,當你寫完第二行代碼時,需要用到「再1-2行中間插入一行」,此時你的游標停留在第二行,傳統編輯器你需要:按上箭頭移動游標到第一行 -> 按END鍵去到第一行末尾 -> 按回車插入一行,mac下的END鍵還需要用CMD+右來組合出來,而Vim/Atom-VimMode中,你只需要shift+o即可,手指完全不離開主鍵盤區,不用像傳統編輯器那樣,右手先移動到箭頭區又移動到HOME的小鍵盤區,再移動回主鍵盤區這么麻煩,類似還有:

使用o直接再下一行插入,避免 END/回車

使用I再行首插入,避免移動半天游標。

向前/後移動一個單詞到單詞頭、尾。

快速更改當前單詞,用/來快速搜索移動游標。

dd+p來快速移動代碼塊,取代shift+方向鍵半天。

shift-j 來兩行合並成一行,代替 HOME, back 若干次。

。。。

你再編輯代碼的時候,90%的情況可以直接一步完成,這就叫細粒度微操,而且整個過程手都不需要離開主鍵盤,不像傳統編輯器那樣,若干笨重的操作組合再一起,操作不夠細步驟多的同時手還要再:主鍵盤區,方向鍵區,擴展鍵區 來回移動,效率奇低。而Vim/Atom-VimMode下,手指隨時守護在home區(ASDF JKL;),所有微操都是圍繞HOME區進行,不會移動到任何主鍵盤以外的區域,更別說用滑鼠、觸摸板。


3. 批量操作:

比如要給下面代碼每行後面加一個分號:

var x = 1var y = 2var z = 3console.log('result is ' + (x + y + z).toString())

一般做法是:移動游標到行末->END->分號->移動游標到下一行,Vim裡面不需要移動游標到行末,只需循環敲入:「A;<ESC>j」 即可,本來操作就少很多。這還不是最少操作,更少操作是利用Vim裡面的句號「.」功能重復上一次操作,即第一行「A;」補充了一個分號後,第二行只需要按一下"."即可重復,於是最後操作變為:

第一行:A;<ESC>

後面所有行:J.


超級爽快的操作,這樣的操作還很多,你還可以單條命令對一萬行代碼重復上述步驟,或者把c代碼拷貝到go裡面先一句話把所有分號給刪除了。Vim下面的名言:絕不重復。


總之如果你熟悉 VIM模式,用 Atom能感到完全自由的方式,隨心所欲的書寫代碼,而不是被書寫這件事情費腦筋,解放大腦完全用於思考而不用於打字。但是同時對不習慣VIM的人照樣友好,或者對想使用VIM的便利卻又痛恨VIM這個軟體的簡陋的人帶來了福音。


脊椎記憶


「同樣動作重復300次,肌肉就會有記憶,而一個動作重復600次,脊椎就會有記憶」
-- 李小龍


編輯器就是關於脊柱記憶的東西,所以多投入一些時間去了解你使用的編輯器,掌握他們的各種快捷操作和高級功能是一個能讓你事半功倍的好主意。


格鬥游戲玩的好的人有很多,下等高手靠熟練,中等高手靠反應,上等高手靠意識。更熟練的掌握你的編輯器,讓更多日常工作固化成記憶記錄再你的脊椎上,使用的時候,脊椎這枚協處理器就能完成代碼編寫,一個操作,剛一想到,脊椎就自動執行出來了,小腦騰出空間來組織判斷,大腦騰出空間來思考更重要的東西,就像你走路,你不用思考邁腿那麼自然,別人一拳過來,你潛意識一動,一連串動作就出去了,一隻飛蛾飛過來,你潛意識的閉上眼睛保護眼部,這就是脊椎記憶,如果還要經過大腦繞一圈,反應慢不說,大腦這顆cpu都用在這些瑣事上了,思考的時間自然少了不少。


所以從內到外的了解你的編輯器,並且熟練掌握他們,是對你提高工作效率的最佳投資,Atom的全平台支持,開放源代碼,深度可定製等三個特點,比起其他閉源的,平台支持不全的,擴展少的編輯器來說能讓你有不同層面的了解機會,同時為你提供足夠的空間。


深度可定製系統


Vim/Emacs的精髓在於:「可以調教」,本來不順手的東西,只要容易調教,假以時日,都會慢慢變得越來越順手,越來越「懂你」,越來越「貼心」,以至於後面大家都離不開它了。而 Atom 也同樣是一款容易被你調教的編輯器。先前給vim寫過插件,給sublime寫過插件,如今給Atom寫過插件,橫向對比下來,幾個結論:


插件能做事情多少:Atom > Vim >> sublime

插件開發學習門檻:Vim > Atom > sublime

插件開發文檔豐富:Atom > sublime >> Vim


Atom 的定製化程度遠遠高過sublime之類(不用實際看法,看看雙方開發文檔即可),直追 Vim / Emacs,sublime的大部分定製無外乎改改json,插件能做的事情相當有限。


Atom 的定製化系統主要有三方面:


1. 細致:

設計之初就考慮的事情,方方面面都能定製,見官方文檔,以及插件:vim-mode,minimap (稍微了解下這兩個類似的功能再 Atom 和 sublime的實現就能知道 sublime被甩了多少條街了)。可以細粒度的控制編輯器內所有行為,小到移動一下游標,刪除當前一個字元,大到打開一個面板,比如 「core:more-up」 可以向上移動一行游標,「window:focus-pane-on-left」 可以把焦點設置到左邊的面板,atom內核和大量第一方第三方packages 都是以命令的方式把基礎功能提供出來,你可以隨意互相調用或者設置熱鍵。

除去命令外的API層面,幾乎每個部件每個像素點都可控,比如這樣的插件你永遠無法再 Vim / Emacs / Sublime 下面見得到:activate-power-mode。


2. 直觀:

由於使用 javascript/coffee進行開發,但 javascript/coffee是屬於即便你沒寫過他們,讀都能讀得懂,VimScript就不一樣了,雖然也能做相同的事情,但實話實說,晦澀難寫,比如我要取得當前文件的路徑和文件名,在 VimScript裡面需要這么寫:

let l:path = expand('%:p:h')let l:name = expand('%:t:r') 或者 let l:name = expand('%<')

而在 Atom 里我們用atom自己的功能直接取出路徑來,然後進行切割:

var fullpath =atom.workspace.getActiveTextEditor().getPath();var filename = path.basename(fullpath);var filepath = path.dirname(fullpath);

就問大家一下?哪段代碼更友好直觀?你一眼就知道在做什麼?你更願意用按照哪段代碼進行插件開發?是上面的VimScript?還是下面的 javascript ?


結論是很清晰的,Atom的 javascript開發插件更簡單直觀,即便沒文檔,看別人怎麼寫的自己也會了,同時靈活性大大高於VmScript,各種事件處理回調,javascript天生擅長做這些事情,還有第二行,第三行,我們用到了 node.js 的 path模塊,進行文件路徑切割。這樣的寫法,再VimScript 裡面基本是無法想像的。


Vim是強大,但是畢竟是30年前的東西了,即便最熟練的 Vimer 也都承認 VimScript 的晦澀難懂,阻礙了很多人為其開發插件。而給Atom開發插件,只需要掌握javascript,掌握 javascript的人很多,學習了javascript你也可以用在很多地方。不像VimScript那樣只能用在Vim裡面,而正因為其晦澀,Vim新版本開始支持內嵌 python的寫法:

python << EOF
import random
print random.randint(0,10)EOF


VimScript中 Python等動態的支持正是說明其開發維護者也承認 VimScript本身的古老,對比現代編程語言已經有些格格不入了,缺乏強大的描述能力,難以構建復雜的功能模塊,才會去支持Python內嵌這樣的寫法。可大量的工作還是需要再Python之外完成,同時,並非所有平台自帶的Vim都支持python,除了mac外,所有debian / ubuntu 發行版自帶的Vim都不支持 Python。導致你想寫一個通用的擴展還得判斷下是否 has('python') 沒有的話老老實實用 VimScript 去實現它,這不是折磨人么?


Sublime裡面可以用原生 Python 寫擴展,比 VimScript爽,但是 sublime 的插件能做的事情還不及VimScript的一半,所以怎麼能指望他們能寫出高端的功能來呢?


3. 強大:

Atom的內核 Electron (原來的 Atom-shell)可以理解成:Chromium + Node.JS,而整個Atom的界面,你可以理解成就是一顆 HTML 的 DOM 樹結構,這意味著你可以這樣:

var div = document.createElement("div"); div.innerText = "abc"; atom.workspace.addBottomPanel(div);

就可以簡單的在 atom 裡面增加一個顯示對象,這意味著再給div加個 html的 onclick就可以實現GUI交互,界面上的對象隨便寫點html代碼就可以控制效果,意味著你可以使用 jQuery 來為atom增加新面板,意味著你只需要寫一個簡單的 .css 文件就可以把 Atom 整個編輯器的外觀給修改了。這在 Vim/Emacs 中是幾乎不可想像的事情,sublime基本就別提了。


大量的前端開發技術和 Node.JS 基礎模塊供你任意使用,正是由於近年 Chromium / node.js 系列技術的成熟,和 Atom / Visual Studio Code 這類基於前端技術的客戶端軟體的成功,讓我看到了客戶端(桌面+移動)軟體開發的新方向。


做VIM/Emacs不能做的事情


Vim/Emacs過去給人的映像是:幾乎能做任何事情,確實如此,但畢竟是二三十年前的東西了,而他們一直堅挺到現在一方面是操作便利,更重要的是這么長時間還沒有出現一款又開源又具備同樣操作便利性和可擴展性的編輯器,所以Vimer, Emacser 們最樂意展示給別人看的就是他們又安裝了什麼插件,急於展示可以把 Vim / Emacs 裝扮成了一個多像 IDE 的東西,而今天這個「可以做任何事情」的高度可定製特性已經被Atom所吸收並完全超越,就像 Atom 的開發blog:「 Introcing Atom」 上說的一樣,對易用性和可展性 「決不妥協」 :

We think we can do better. Our goal is a zero-compromise combination of hackability and usability: an editor that will be welcoming to an elementary school student on their first day learning to code, but also a tool they won't outgrow as they develop into seasoned hackers.


拋開易用性的這個 Atom 的明顯優勢不說,前面其實已說了不少 Atom 比 Vim/Emacs 更靈活強大的地方,可能有些人還有疑惑,不是說 Emacs 「沒有不能做的事情」 么?你看 Atom的面板裡面可以嵌入一個 Terminal,Vim/Emacs一樣可以嵌入啊,為何還說 Atom 比它強啊?


沒錯,Vim用久了會產生心理舒適區,多模式編輯使人神清氣爽,命令化文本處理讓你賞心悅目,但是受限於本身機制用久了會容易痛苦掙扎:雖然vim的各種擴展似乎什麼事情都能做,但每個擴展卻只能做到70分,總有那麼30%的地方做不到位。所以用的時間長了,上半身爽的要死,下半身痛不欲生。。。。


Vim/Emacs即便大部分擴展功能也都可以稱為「能用」,可幾十年的歷史包袱太沉,很多事情對他們來講就是禁區,比如詭異的標簽功能,容易誤操作的buffer/窗口切換,缺乏非同步機制,編譯時間長只有傻等著,無法跟Atom一樣邊讀代碼,邊運行程序看結果,對照輸出結果和源代碼找問題,連實現個內嵌終端都用了若干年,還實現的那麼別扭。。。。。。。。。


這類硬傷有許多,再舉個最簡單的例子,minimap,就是 sublime那種大家喜歡的文檔縮略圖,這個現代編輯器必備的功能,誰能用 Vim/Emacs 實現一下看看?Atom 可以衍生出 Visual Studio Code 這樣漂亮的編輯器,Vim/Emacs能衍生么?Atom可以隨便用各種先進的前端技術,不當可以嵌 Terminal我甚至可以再 Atom 嵌入一個 js版本的 DOSBOX 玩老游戲《命令與征服》:

https://archive.org/details/softwarelibrary_msdos_games

Play DOS games online


當然這樣並沒有任何卯用,但是如果在 Atom裡面內嵌一個瀏覽器,方便的實時預覽html/css的效果呢?或者 Atom 裡面內嵌一個 Markdown Previewer ,實時查看 Markdown 的效果呢?請問 Vim/Emacs 里怎麼實現法?


Atom插件演示:markdown實時預覽,左邊寫右邊即時更新,100%兼容github的markdown語法


短短兩年的時間,這么多優秀的插件,只想說,如今 Atom 作為 Vim/Emacs 的繼承者和超越者出現了,所以社區對 Atom 的反應也是熱烈的,看看下面一組數據,截止今天(2016年3月15日),Atom共有擴展插件 3500+ 個,發布不到兩年的時間,這是什麼概念呢?

  • Sublime的插件(Stats - Package Control)大概 3500+個,但是sublime發布了5年的時間。

  • Emacs 的插件大概有2900個,可Emacs發布到今天已經過去 25+年的時間。

  • Vim 的各種插件雖然有9000個,但是Vi/Vim系列的歷史長達 30+年,是atom的15倍。

  • 這就叫社區的活躍度的區別,為什麼短短兩年那麼多開發者先後給atom貢獻了各種高質量的擴展,為什麼大家對atom的熱情那麼高?為何好多人接觸了atom一段時間後都深深的愛上了它?這是有原因的。

    再談性能優化

    很多人錯誤的覺得 Atom慢是因為使用了 JavaScript/Coffee 等 Web 技術,所以先天慢,其實這是個誤區,即便使用 Web 技術它也還能快很多,同時再慢可以往C++層的 Electron 挪啊,這也是這幾個版本優化的一些方向,基於 Atom 開發的 Visual Studio Code 可以那麼流暢, Atom 性能優化空間還很大,了不起多參考下自己的兒子,同樣開源的 vscode怎麼做的。

    同時 Atom編輯器1.0版本以來性能得到了很大的提升,主要是兩個方面,一方面是js層的各種渲染優化,控制項優化,延遲繪制,延遲載入,只繪制當前需要的東西等,另外一方面是將一些核心數據結構移動到 Electron 的 C++層,如今1.54版本性能較去年版本已經有了本質區別,運行時載入是慢些(但也比eclipse快很多),實際使用並沒覺得不如別的編輯器,況且,js層的優化和C層的優化未來還有很大的空間可以進步。

    不過我不太喜歡 vscode 使用 Typed Script 進行開發,用點標准技術不行么,Atom使用 JavaScript/Coffee 寫的多爽,如今 Atom 正在准備慢慢的切換到 JavaScript 的新標准 ES6 上。其次 vscode 快是快在「做的事情少」,主要是可擴展性方面的努力遠不及 Atom,插件機制相對弱智,所以 vscode 的社區如今還不是特別活躍,擴展也少,發布一年多隻有差不多300+個擴展,遠不如 Atom 的情況,如果 vscode 還是按照現有結構開發下去,可能永遠不會擁有 Atom的靈活度,這樣再未來就無法擁有各種豐富多彩的插件。

    再說開源免費

    UltraEdit 單用戶版本價格: 79 美刀

    UltraEdit 伺服器版價格: 229 美刀(多人登錄同一台伺服器的桌面使用),企業版更貴

    EditPlus 單用戶版價格: 35 美刀,而且還只有windows版本,

    Sublime 單用戶版價格:70 美刀

    TextMate 單用戶版價格:48 歐元,而且還只有mac版本。

    這些都是錢啊,可能你會說可以免費試用或者破解啊,是的個人可以,但正常來說sublime這些試用指不能拿來搞生產不能拿來工作的,個人你用用可以,但國外人家守規矩,不會亂用,這意味著失去一大批為其開發擴展的國外開發者,同時站在公司考慮IT方案的角度,免費試用和破解將來都是潛在的麻煩,現在上百人的公司微軟都會來收windows的錢了,版權問題越來越嚴肅,你得把這筆潛在費用考慮進去,同時這些閉源的或者單平台的東西,並不值得再上面花費過多精力和投資。

    拋開擴展性問題和價格問題,我們再來看各個熱門的免費編輯器的試用情況:

    Notepad++:免費,開源,只能運行於windows

    PSPad:免費,不開源,只能運行再 Windows

    Gedit:免費,開源,只能跑再 GNome下,Ubuntu用用,Windows/mac版本簡直是殘缺的。

    Programmer's Notepad : 免費開源,只能跑 Windows

    Notepad2:免費bu不開源,只能跑 Windows

    更關鍵的是:閉源的東西個人作者可能失去興趣不再更新,商業公司的話,你需要一個功能,就只能無限期的等待他們發慈悲加入進去。而免費開源的很多其他編輯器除去平台兼容性問題外,更重要的時擴展性差。

    而同時滿足:免費+開放+強擴展性的編輯器如今就只出現過三個:Vim / Emacs / Atom。他們是真正屬於使用者的編輯器,他們能變成使用者希望變成的樣子。這些曾經出現過得收費的或者免費的編輯器,憑借著一兩個自身獨有的 「賣點」,再某些時間段內都曾經流行過,可就像流星一樣一閃而過,如今他們都統統完成了自己的歷史使命,新的一頁可以翻開了。終端環境的話確實 Vim / Emacs 繼續下去,但桌面環境的話,Atom將會繼續向前,走出新的一步。

5. 代碼和編譯程序是用什麼軟體

你是用什麼系列單片機的?絕大部分要都是用KEIL來編寫的。在KEIL裡面既可以用匯編來寫也可以用C語言來寫,你寫完了程序之後還可以在KEIL裡面做軟體的模擬,這種軟體查錯的方法給程序員帶來了極大的方便。
除此之外還可以用KEIL與PROTEUS聯調~~~~
個人強烈建議用KEIL來寫單片機的程序

6. 什麼軟體可以直接進行代碼的編譯運行

這個要看你用什麼語言了,不同語言都有不同的編輯工具
如visual studio

7. 什麼是編譯器

編譯器

編譯器是一種特殊的程序,它可以把以特定編程語言寫成的程序變為機器可以運行的機器碼。我們把一個程序寫好,這時我們利用的環境是文本編輯器。這時我程序把程序稱為源程序。在此以後程序員可以運行相應的編譯器,通過指定需要編譯的文件的名稱就可以把相應的源文件(通過一個復雜的過程)轉化為機器碼了。

[編輯]編譯器工作方法
首先編譯器進行語法分析,也就是要把那些字元串分離出來。然後進行語義分析,就是把各個由語法分析分析出的語法單元的意義搞清楚。最後生成的是目標文件,我們也稱為obj文件。再經過鏈接器的鏈接就可以生成最後的可執行代碼了。有些時候我們需要把多個文件產生的目標文件進行鏈接,產生最後的代碼。我們把一過程稱為交叉鏈接。

一個現代編譯器的主要工作流程如下:

* 源程序(source code)→預處理器(preprocessor)→編譯器(compiler)→匯編程序(assembler)→目標程序(object code)→連接器(鏈接器,Linker)→可執行程序(executables)

工作原理

編譯是從源代碼(通常為高級語言)到能直接被計算機或虛擬機執行的目標代碼(通常為低級語言或機器言)。然而,也存在從低級語言到高級語言的編譯器,這類編譯器中用來從由高級語言生成的低級語言代碼重新生成高級語言代碼的又被叫做反編譯器。也有從一種高級語言生成另一種高級語言的編譯器,或者生成一種需要進一步處理的的中間代碼的編譯器(又叫級聯)。

典型的編譯器輸出是由包含入口點的名字和地址以及外部調用(到不在這個目標文件中的函數調用)的機器代碼所組成的目標文件。一組目標文件,不必是同一編譯器產生,但使用的編譯器必需採用同樣的輸出格式,可以鏈接在一起並生成可以由用戶直接執行的可執行程序。

編譯器種類

編譯器可以生成用來在與編譯器本身所在的計算機和操作系統(平台)相同的環境下運行的目標代碼,這種編譯器又叫做「本地」編譯器。另外,編譯器也可以生成用來在其它平台上運行的目標代碼,這種編譯器又叫做交叉編譯器。交叉編譯器在生成新的硬體平台時非常有用。「源碼到源碼編譯器」是指用一種高級語言作為輸入,輸出也是高級語言的編譯器。例如: 自動並行化編譯器經常採用一種高級語言作為輸入,轉換其中的代碼,並用並行代碼注釋對它進行注釋(如OpenMP)或者用語言構造進行注釋(如FORTRAN的DOALL指令)。

預處理器(preprocessor)

作用是通過代入預定義等程序段將源程序補充完整。

編譯器前端(frontend)

前端主要負責解析(parse)輸入的源程序,由詞法分析器和語法分析器協同工作。詞法分析器負責把源程序中的『單詞』(Token)找出來,語法分析器把這些分散的單詞按預先定義好的語法組裝成有意義的表達式,語句 ,函數等等。 例如「a = b + c;」前端詞法分析器看到的是「a, =, b , +, c;」,語法分析器按定義的語法,先把他們組裝成表達式「b + c」,再組裝成「a = b + c」的語句。 前端還負責語義(semantic checking)的檢查,例如檢測參與運算的變數是否是同一類型的,簡單的錯誤處理。最終的結果常常是一個抽象的語法樹(abstract syntax tree,或 AST),這樣後端可以在此基礎上進一步優化,處理。

編譯器後端(backend)

編譯器後端主要負責分析,優化中間代碼(Intermediate representation)以及生成機器代碼(Code Generation)。

一般說來所有的編譯器分析,優化,變型都可以分成兩大類: 函數內(intraproceral)還是函數之間(interproceral)進行。很明顯,函數間的分析,優化更准確,但需要更長的時間來完成。

編譯器分析(compiler analysis)的對象是前端生成並傳遞過來的中間代碼,現代的優化型編譯器(optimizing compiler)常常用好幾種層次的中間代碼來表示程序,高層的中間代碼(high level IR)接近輸入的源程序的格式,與輸入語言相關(language dependent),包含更多的全局性的信息,和源程序的結構;中層的中間代碼(middle level IR)與輸入語言無關,低層的中間代碼(Low level IR)與機器語言類似。 不同的分析,優化發生在最適合的那一層中間代碼上。

常見的編譯分析有函數調用樹(call tree),控制流程圖(Control flow graph),以及在此基礎上的變數定義-使用,使用-定義鏈(define-use/use-define or u-d/d-u chain),變數別名分析(alias analysis),指針分析(pointer analysis),數據依賴分析(data dependence analysis)等等。

上述的程序分析結果是編譯器優化(compiler optimization)和程序變形(compiler transformation)的前提條件。常見的優化和變新有:函數內嵌(inlining),無用代碼刪除(Dead code elimination),標准化循環結構(loop normalization),循環體展開(loop unrolling),循環體合並,分裂(loop fusion,loop fission),數組填充(array padding),等等。優化和變形的目的是減少代碼的長度,提高內存(memory),緩存(cache)的使用率,減少讀寫磁碟,訪問網路數據的頻率。更高級的優化甚至可以把序列化的代碼(serial code)變成並行運算,多線程的代碼(parallelized,multi-threaded code)。

機器代碼的生成是優化變型後的中間代碼轉換成機器指令的過程。現代編譯器主要採用生成匯編代碼(assembly code)的策略,而不直接生成二進制的目標代碼(binary object code)。即使在代碼生成階段,高級編譯器仍然要做很多分析,優化,變形的工作。例如如何分配寄存器(register allocatioin),如何選擇合適的機器指令(instruction selection),如何合並幾句代碼成一句等等。

8. c++編程的文本編輯器和編譯器有什麼區別

編譯器是把你的代碼(高級語言)解釋為CPU指令的一種程序。
你說的這個文本編輯器應該是開發環境,編輯器就是幫助你寫出正確語法的代碼、設置工程屬性的一個環境。

9. APP源碼要用什麼工具編譯

sourceinsight是個代碼瀏覽工具,它會自動對你的工程源碼進行語法分析,方便你迅速查找對某個特定符號的引用。它本身不帶編譯器調試器,但是你可以指定要用的編譯器,記得sourceinsight里有這個選項。1、->Removemissingfilefromproject選上可以避免因文件找不到而彈出錯誤對話框。把Misc->Usestricterconfirmationdialog選項去掉可以使確認時不輸入"yes"。2、TypingSourceEditing->Indentcommandsaffect#-preprocessorstatements。去掉後(默認值),進行多行縮進時不會影響預處理語句(如#if#endif)。AutoCompletion->Usedetailedcompletionwindow,選上後,聯想時可以出現該函數的詳細信息。見下圖:(簡單)(詳細)AutoCompletion->Insertparemetersforfunctions,去掉後,自動聯想不會把整個參數都輸出到當前行。BrowsinginLists->Matchsyllableswhiletyping(slower)。在symbollist框檢索符號時是否採用音節匹配方式,如對於函數FindNext,輸入find或者next都可以找到該函數。該功能可能導致反應緩慢(視工程和機器配置而定),建議關閉,因為即使在關閉狀態下也可以通過先輸入空格再輸入單詞來動態啟用該功能。注意BrowsinginLists里其實有兩個功能,但一般我們只能看到Matchsyllableswhiletyping這一條,應該是si的菜單設計沒有做好,導致在中文windows下不能顯示全,另一個功能是Matchmemberswhiletyping,用於打開/關閉按成員變數名來檢索類/結構體的功能。3、FilesOpeningFiles->Sharing:Letotherprogramsmodifyfiles,以共享方式打開文件,這個很重要,保證可以在其它編輯中同時編輯該文件。典型的場景就是用ide環境去動態編譯調試,而用si靜態閱讀。Customize'Open'Command,用於設置Ctrl+O打開的頁面,默認選項是,建議保持默認。SavingFiles->,如果發現保存後就不能undo了,請檢查該選項是否選中。。保存時自動去除每行尾部的空格和tab。建議選中。4、Languages自定義其它編程語言的語法解析,這個還是另寫一篇來講吧。ConditionalParsing不要錯過了,這里的Conditions功能實在讓人喜歡。Conditions是什麼意思呢?我們的代碼中一般都會有一些開關宏,通過在Conditions中配置這些宏的默認值,可以讓si把配置為不開啟的宏視為無效代碼,從而不進行符號檢索。如果源代碼中的開關宏太多,還可以使用ConditionParsing中的ScanFiles來自動找出所有開關宏。5、SymbolLookups沒太多特別的。6、Display顯示配置和個人喜好和顯示器的狀態有關,偶用的x60小本,屏幕資源有限,所以在DisplayElements里把ProjectWindow,StatusBar,ToolBar,ClipWindow都關了,基本用快捷鍵可以代替它們。Options->。很多大師都教導我們說一行不要寫太多代碼。在這個指導思想下,我們不需要這個東東。Showexactcaseoffilenames。如果看不慣si把所有的文件名首字母都大寫就勾上這個選項吧。。SourceLink很多時候用於外部命令輸出結果的解析(如Make,lint),這個功能會把解析結果與目標窗口自動tile,很實用。Trimlongpathnameswithellipses。這個建議不要選中。事實上這個主要影響標題欄,但一般來說標題欄上的空間是充裕的,選上之後往往會令我們不知道所編輯文件的具體位置。

10. C語言的代碼編輯器怎麼用

C語言的代碼編輯器一般使用UE,以下介紹UE的使用方法:
1、在UE上用的最多的是c語言,這里,就以c語言作為參考,看看UE的強大的操作功能。打開一個c語言文件。文件-- 打開--選擇。
2、這個時候,可以看到它的函數功能和上面的快捷方式的圖標是可以使用的。函數列表可以在視圖--視圖列表--函數列表中找到。
3、然後,可以使用ue的查看方式,這里是默認為c語言格式,還可以設置為c#,java等格式,這樣可以把部分信息高亮顯示。還可以在:視圖 --- 查看方式-----編碼方式中找到。
4、比較功能和16進制功能,這個是很強大的工具。因為,在上線的時候,不知道修改了什麼就可以使用這個進行查看,還有,在linux下炒作的時候,16進制就可以看到文件中的字元編碼,找到最終的錯誤原因。
5、還有就是ue的列模式,這個模式對於編程來說,簡直逆天,當有些數據需要進行修改的時候,只是改某些列中的部分,這個就非常好用了。直接修改多列。這也是ue的一個特色吧。
6、強大的ftp功能,一般可以使用ue直接在ftp伺服器上直接編輯文件,然後,直接保存在伺服器上,這樣呢,可以減少代碼的本地管理和版本控制。
7、普通文件操作可以在快捷方式中使用新建,保存等功能,可以使用字數統計功能,具體的字數在狀態欄中有顯示。

熱點內容
循跡小車演算法 發布:2024-12-22 22:28:41 瀏覽:82
scss一次編譯一直生成隨機數 發布:2024-12-22 22:04:24 瀏覽:956
嫁接睫毛加密 發布:2024-12-22 21:50:12 瀏覽:975
linuxbin文件的安裝 發布:2024-12-22 21:46:07 瀏覽:798
vlcforandroid下載 發布:2024-12-22 21:45:26 瀏覽:664
電腦做網關把數據發送至伺服器 發布:2024-12-22 21:44:50 瀏覽:432
新華三代理什麼牌子的伺服器 發布:2024-12-22 21:33:21 瀏覽:342
歡太會員密碼是什麼 發布:2024-12-22 20:57:28 瀏覽:74
sqllocaldb 發布:2024-12-22 20:07:08 瀏覽:126
如何找到我的伺服器 發布:2024-12-22 19:52:14 瀏覽:301