後臺開發閱讀筆記——編譯與連結
編譯與連結的過程可以分解為4個步驟,分別是預處理,編譯,彙編和連結。
1、預處理過程主要處理那些原始碼檔案只能夠以“#”開始的預編譯指令。比如#include,#define等。
1)、將所有#define刪除,並且展開所有巨集定義。#undef則取消對某個巨集的定義,使以後該串的出現不再被替換。
2)、處理所有條件預編譯指令,比如#if,#ifdef,#elif,#else,#endif。
3)、處理#include預編譯指令,將被包含的檔案插入到該預編譯指令的位置。注意這個過程是遞迴的,就是被包含的檔案可能還包含其他檔案。
4)、過濾所有的註釋“//”和“/**/”。
5)、新增行號和檔名標識。
6)、保留所有的#pragma編譯器指令,因為編譯器需要使用它們。
2、編譯過程分為:詞法分析,語法分析,語義分析,原始碼優化,程式碼生成和目的碼優化。
3、連結就是把編譯後的模組組裝起來。把各個模組間的相互引用的部分都處理好,使得各個模組能夠正確的銜接。
相關推薦
後臺開發閱讀筆記——編譯與連結
編譯與連結的過程可以分解為4個步驟,分別是預處理,編譯,彙編和連結。 1、預處理過程主要處理那些原始碼檔案只能夠以“#”開始的預編譯指令。比如#include,#define等。 1)、將所有#define刪除,並且展開所有巨集定義。#undef則取消對某個巨集的定義,使以後該串的出現不
後臺開發閱讀筆記——伺服器與客戶端
伺服器: 伺服器收到客戶端發來的請求資料,解析請求資料後處理,最後返回結果。接收請求的方式可以是通過TCP請求包,也可以是HTTP請求包(也是TCP連線)。若是TCP請求,常見的為二進位制格式;若是HTTP方式,請求包格式一般是JSON或者XML格式,或是自定義的ASCII文字。 客
後臺開發閱讀筆記——STL之vector,map
vector的優點: (1)、可以使用下標訪問個別元素。 (2)、迭代器可以按照不同的方式遍歷容器。 (3)、可以在容器的末尾增加或刪除元素。 和其他標準順序容器相比,vector能更有效訪問容器內的元素和在末尾新增和刪除元素,而在其他位置新增和刪除元素,則不及其他順序容器,在迭代器和引
後臺開發閱讀筆記——STL(標準模板庫)的使用之string類實現
string類的實現: class String { public: String(const char *str=null); String(const String &other); ~String(); String &operator =(const
後臺開發閱讀筆記——面向物件
類是物件的抽象,物件是類的例項。 類的封裝性: 把資料和這些資料有關的操作封裝在一個類裡。還定義了私有,公有,和受保護三種基本訪問許可權。解決了程式的可擴充套件性。 解構函式的執行時機: (1)、在函式中定義了一個物件,當函式呼叫結束時,物件會被釋放,且在物件釋放前會自動執行解構函式。
後臺開發閱讀筆記——第一個C++程式
#include <>與#include ""的區別: 前者常用來包含系統提供的標頭檔案,編譯器會到儲存系統標準標頭檔案的位置查詢標頭檔案;後者常用於包括程式設計師自己編號的標頭檔案,用這種格式時,編譯器先查詢當前目錄是否有指定名稱的標頭檔案,然後從標準頭目錄中進行查詢。
後臺開發閱讀筆記——TCP/IP網路模型
TCP/IP網路模型分為應用層,傳輸層,網間層,網路介面層。 TCP提供面向有連線的,可靠的服務。IP提供面向無連線的,不可靠的服務。 TCP通過3次握手建立連線,4次揮手取消連線,通過超市重傳,滑動視窗,擁塞控制維護連線,保證服務可靠。 擁塞控制有4個核心演算
初學者怎麼理解整合開發環境,編譯與連結(一)
大部分講c語言或者c++語言的書籍,一上來都是直接編寫程式碼,諸如經典“hello,world”程式。 這對初學者,尤其是自學者造成了不小的困難,初學程式設計的時候,簡直一頭霧水,拿著教材都不知道從哪
C++後臺開發之編譯與連結2017/5/12
一. 編譯與連結 #include <iostream> int main() { std::cout<<"Hello world\n"; return 0; } 每一位初學者接觸所有語言時,都會面對這一行程式碼
gcc/g++ 連結庫的編譯與連結
gcc/g++ 連結庫的編譯與連結 [email protected] http://blog.csdn.net/surgewong 程式編譯一般需要經預處理、編譯、彙編和連結幾個步驟。在實際應用中,有些公
後臺開發小筆記
單例模式 在應用這個模式時,單例物件的類必須保證只有一個例項存在。 服務程序中的其他物件再通過這個單例物件獲取這些配置資訊。這種方式簡化了在複雜環境下的配置管理。 __new__實現 用裝飾器實現單例模式 普通、靜態方法、類方法 普通方法傳入的第一個引數必須是self(當然也可以不用s
Linux文件閱讀筆記-cut與sort的基本用法
目錄 cut命令 使用sort排序命令 cut命令 cut【移除一個檔案的每個行的某個部分】 概要 標準輸出檔案中每一行選中的部分。 關於引數 “-”與“--”都是同樣的要求 -b;--bytes:選擇這些位元組進行分割; -c,--characters
編譯與連結
編譯與連結 預編譯 展開所有"#“開頭的預編譯指令,如”#include"、"#ifdef" 刪除註釋 新增行號和檔名標識用於編譯器產生除錯符號 保留所有"pragram"編譯器指令,編譯器需要使用 #include <stdio.h&g
14 編譯與連結過程以及MFC靜態/動態連結庫的呼叫
0 引言 在Windows作業系統中,幾乎所有的內容都是以DLL的形式存在的。例如顯示的字型和圖示儲存在GDI.DLL中;顯示Windows桌面、處理使用者輸入所需要的程式碼唄儲存在User.DLL中;Windows程式設計所需要的大量API函式儲存在Kernel.DLL中。 1 編譯連結
C++編譯與連結(1)-編譯與連結過程
大家知道計算機使用的一系列的1和0 那個一個C++語言程式又是如何從一個個.h和.cpp檔案變成包含1和0的可執行檔案呢? 可以認為有以下的幾個環節 源程式->預處理->編譯和優化->生成目標檔案->連結->可執行檔案
web前端開發學習筆記-02-超連結
原課程在這裡:https://www.icourse163.org/learn/BJFU-1003382003?tid=1003609002#/learn/announce 超連結a 屬性:href,超連結,設定這個的值 連結到本站點的其他網頁 <a hr
Qt文件閱讀筆記-C++與QML混合程式設計(QML畫餅狀圖)
這裡只點名一點: Qt Charts是利用Qt的圖形檢視框架(QGraphics)搞出來的,底層並不是用OPenGL,而QML卻與OPenGL的底層緊密關聯 執行截圖如下: 原始碼如下
C++編譯與連結-淺談內部連結與外部連結
為什麼有時會出現aaa已在bbb中重定義的錯誤? 為什麼有時會出現無法解析的外部符號? 為什麼有的行內函數的定義需要寫在標頭檔案中? 為什麼對於模板,宣告和定義都在寫在一起? 讀完這篇部落格,相信你會有一個初步的認識 注,我們現在談的
C/C++ 程式編譯與連結的過程詳解(靜態連結)
我們知道一個程式的執行需要經過編譯和連結兩個階段,其過程究竟是怎樣的呢? 程式的編譯階段分為以下幾個步驟,分別是預編譯、編譯、彙編、生成二進位制可重定向檔案(.o)。 預編譯: 首先是原始碼檔案xxx.c和相關的標頭檔案被預編譯器編譯成一個.i檔案。
編譯與連結(二)——靜態連結
連線通過編譯過程,一個原始檔(.c)就生成了一個對應的目標檔案(.o)。一個工程,不可能是一個檔案組成,從幾十個到幾百個,大的專案工程有成千上完個檔案,這些檔案通過編譯,只是從原始檔變成了目標檔案,但是這些檔案不能單獨執行,各個檔案(模組)之間存在一定的關係,要使工程正常工作,各個目標