内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

如何讓計算機去理解我們寫的c++代碼-創(chuàng)新互聯(lián)

計算機是如何“讀懂”我們所編寫的代碼的 編譯語言的發(fā)展史

第一開始,我們的計算機只能識別010101這樣的二進制指令,而我們?yōu)榱俗層嬎銠C去計算我們所需要的結(jié)果。就需要去記憶一個又一個的二進制指令,這樣既繁瑣又容易出錯。后來人們想了一種方法,用簡單的十進制數(shù)字與字母的組合去對應機器能夠讀懂的一個個二進制指令,就這樣發(fā)明了匯編語言。匯編語言相比于機器語言,操作更簡單,記憶更便捷。但這樣遠遠不夠。之后人們又發(fā)明了高級語言,高級語言是一種相比于匯編語言邏輯更清晰,更易讀的語言。高級語言又與匯編語言有相似點。我們需要先通過類似對照表的東西,將高級語言翻譯成匯編語言。匯編語言再翻譯成機器語言。這個時候機器就可以去讀懂高級語言了。
在這里插入圖片描述我們將高級語言翻譯成匯編語言的過程叫做編譯。
將匯編語言翻譯成機器語言的過程叫做匯編。
計算機去允許它能讀懂機器語言,就能生成所對應的結(jié)果了。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設,江蘇企業(yè)網(wǎng)站建設,江蘇品牌網(wǎng)站建設,網(wǎng)站定制,江蘇網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,江蘇網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。創(chuàng)新互聯(lián)公司專注于甘州網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供甘州營銷型網(wǎng)站建設,甘州網(wǎng)站制作、甘州網(wǎng)頁設計、甘州網(wǎng)站官網(wǎng)定制、微信小程序服務,打造甘州網(wǎng)絡公司原創(chuàng)品牌,更為您提供甘州網(wǎng)站排名全網(wǎng)營銷落地服務。C++從代碼到可執(zhí)行的二進制文件的整個流程

C++從代碼到可執(zhí)行的二進制文件一般要進過以下4個流程,分別是預處理,編譯,匯編,鏈接。

我們在記事本或者ide里面編寫的一行一行的c++代碼,我們稱之為源代碼。計算機肯定是讀不懂我們所寫的源代碼的,計算機只能讀懂機器代碼也就是二進制指令。所以由我們寫的c++代碼需要經(jīng)過一系列的處理才能轉(zhuǎn)換成機器語言。
這其中這一些列的處理都是由一個叫做GCC(GNU Compiler Collection,GNU編譯器套件)編譯器套件去完成的。這里我們就不再去介紹GCC編譯套件是一個什么東西啦,我們主要的目的是去通過GCC這個工具去看看我們的源代碼是怎么一步步的變成計算機能讀懂的機器代碼。我們的這一步操作叫做源代碼的預處理。

通常的預處理操作有:
(1) 將所有的#define刪除,并且展開所有的宏定義
(2) 處理所有的條件預編譯指令,如#if、#ifdef
(3) 處理#include預編譯指令,將被包含的文件插入到該預編譯指令的位置。
(4) 過濾所有的注釋
(5) 添加行號和文件名標識。

這里我們可以自己在記事本或者ide里寫一個文件。然后我們在智能ide,Linux的命令行,或者unix的終端中輸入g++ -E 目標文件名稱 -o 生成文件名稱。就可以去具體的查看預處理操作到底對你的代碼做了怎么樣的處理。

nowcoder@nowcoder:~/Linux/lession02$ g++ -E test.c -o text.i
nowcoder@nowcoder:~/Linux/lession02$ ls
test.c  text.i
//這里這個text.i就是我們通過GCC這個編譯器生成的預處理后的代碼。

代碼進行過預處理后緊接著需要執(zhí)行編譯操作。編譯操作會將預處理后的源代碼變?yōu)閰R編代碼。
使用命令 g++ -S 預處理文件名稱 -o 生成目標文件名稱 就可以得到一個含有匯編代碼的文件,我們同樣也可以點擊進文件去查看我們的匯編代碼,不過沒有學習過匯編的同學可能看不太懂其中寫的是什么,但是有一些英語單詞是我們一眼就能看出是什么意思的。也可以去猜猜表達的是什么。

nowcoder@nowcoder:~/Linux/lession02$ g++ -S test.i -o test.s
nowcoder@nowcoder:~/Linux/lession02$ ls
test.cpp  test.i  test.s
//test.s文件里面裝著的就是我們預處理后匯編生成的匯編代碼。

這個時候我們的匯編代碼還沒有通過編譯器生成機器可以讀懂的機器代碼,所以要執(zhí)行匯編操作,使匯編代碼轉(zhuǎn)換成機器代碼。輸入命令g++ -c 匯編文件名稱 -o 生成文件名稱 去將匯編代碼轉(zhuǎn)換成機器能讀懂的二進制指令。

nowcoder@nowcoder:~/Linux/lession02$ g++ -c test.s -o text.o
nowcoder@nowcoder:~/Linux/lession02$ ls
test.cpp  test.i  test.s  text.o
//其中這個text.o就是我們生成的二進制文件,這個文件在我的vscode上打不開,
//因為我沒有安裝相應的配置文件,不過沒關系,打開了也看不懂,因為我們沒有學
//習過機器語言。

最后我們要進行鏈接操作,將目標代碼(機器代碼)和其他啟動代碼、庫代碼,和其他目標代碼(這些都是不同文件的機器代碼)進行鏈接,就可以生成一個可執(zhí)行的二進制文件(程序)了。

nowcoder@nowcoder:~/Linux/lession02$ g++ text.o -o test.out
nowcoder@nowcoder:~/Linux/lession02$ ls
test.cpp  test.i  test.out  test.s  text.o
nowcoder@nowcoder:~/Linux/lession02$ ./test.out
13
//其中這個test.out就是我們最終生成的可執(zhí)行文件了。

至此,我們就講解完成了如何將一行行c++代碼如何逐步從一行行代碼轉(zhuǎn)變成為一個可執(zhí)行程序的全過程。

在這里插入圖片描述

附錄,一些常用的GCC指令。

在這里插入圖片描述
在這里插入圖片描述

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站欄目:如何讓計算機去理解我們寫的c++代碼-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://www.rwnh.cn/article38/cehcpp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設、全網(wǎng)營銷推廣定制開發(fā)、Google自適應網(wǎng)站、外貿(mào)網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設
洪洞县| 那曲县| 新密市| 沐川县| 九台市| 鹤峰县| 刚察县| 莱西市| 台东市| 铁力市| 子洲县| 巨鹿县| 长岛县| 珠海市| 永登县| 楚雄市| 湖北省| 海南省| 扬州市| 托克托县| 溧水县| 重庆市| 利川市| 建阳市| 保康县| 安平县| 邮箱| 施秉县| 齐齐哈尔市| 濉溪县| 淮阳县| 莲花县| 吉水县| 昌平区| 长葛市| 克拉玛依市| 十堰市| 霍山县| 山阳县| 济源市| 台北市|