源**的結構主要可以包括三部分:標頭檔案與編譯指令,輔助函式定義以及主函式定義。詳見以下**:
//標頭檔案與編譯指令
#include
using
namespace std;
//輔助函式定義
intaddint
(int a,
int b)
//主函式定義
intmain()
任何一種計算機語言要從某種人們容易理解的形式(源**)轉化成計算機能執行的機器指令,都需要某種特定的翻譯器。通常,這種翻譯器分為兩類:直譯器(interpreter)和編譯器(compiler)。
直譯器將源**轉化成一些動作(機器指令)並立即執行,即一次翻譯和執行一次,之後把這一行的解釋丟掉,使用這種機制的語言也被稱為指令碼語言。而編譯器則直接把所有源**都轉化成彙編或機器指令,最終生成可執行性的檔案。
c/c++語言屬於後者,從源程式到可執行程式,相關的過程大致可分為:
編譯器編譯
鏈結器鏈結
不難看出,特別是對多檔案編譯時,外部函式的宣告(一般宣告在標頭檔案中,可以對同乙個函式有多次宣告)只是令程式順利通過編譯,此時並不需要搜尋到外部函式的實現(或定義),而在鏈結過程中,外部函式的實現(或定義)才會被尋找和新增程序式,一旦沒有找到函式實現,就無法成功鏈結。
因此,在標頭檔案中最好不要放進全域性變數的定義和函式的實現,否則,在多個包含了此標頭檔案的源程式鏈結時會因為重複定義或多個函式實現而出現錯誤。
上面所講在標頭檔案中只放入函式的宣告而不進行定義很好理解,那麼對於需要在標頭檔案中的全域性變數,又應該如何進行宣告?
變數的宣告需要使用extern關鍵字,如下:
int a=0;
//變數的定義並初始化
int b;
//變數的定義
extern
int x;
//變數的宣告
QT源程式與編譯方式
1 源程式 1 純 在qt creator中建立乙個empty qmake project,然後 pro檔案中新增widget模組的語句如下 greaterthan qt major version,4 qt widgets然後新增乙個main.cpp 工程的結構如圖所示 執行結果如圖所示 2 使用...
Python 程式編譯與鏈結
1 預處理 預編譯過程主要處理那些原始檔中的以 開始的預編譯指令,主要處理規則有 將所有的 define 刪除,並展開所用的巨集定義 處理所有條件預編譯指令,比如 if ifdef elif endif 處理 include 預編譯指令,將被包含的檔案插入到該編譯指令的位置,注 此過程是遞迴進行的 ...
源程式與目標程式
源程式也叫原始碼,就是最開始編寫的程式,計算機並不能識別,需要經過編譯生成目標程式。軟體都是目標程式,都是經過編譯的,商業公司一般不會發布原始碼,原始碼涉及到商業機密。1 源程式,是指未經編譯的,按照一定的程式語言規範書寫的,人類可讀的文字檔案。通常由高階語言編寫。源程式可以是以書籍或者磁帶或者其他...