c++是如何執行的

木示清發表於2024-03-31

基本流程:
n個c++原始檔-->傳遞給編譯器
【預處理:將宏定義、條件編譯等預處理指令換成相應程式碼;

編譯[C階段]:預處理後的程式碼轉換為彙編程式碼編譯為彙編程式碼;

彙編:將彙編程式碼轉為目標檔案Windows的.obj(符號表、重定位表等)

連結(靜態和動態)[LNK階段]:組合連結多個目標檔案和庫檔案,包括符號解析、重定位】

-->變成對應的庫或可執行程式

點選檢視程式碼
//Test.h(標頭檔案,確實只包含大括號)
}

//Test1.h
//標頭檔案一般只宣告(也可static/inline),不寫函式體,方便連結,避免出現編譯過程中每個原始檔出現相同內容,連結無法識別
void Test(int,int);
....或....
static void Test(int a,int b){
    std::cout<<"Hello World"<<std::endl;
}
....或....
//inine行內函數:獲取實際函式體將函式呼叫的位置替換為函式體內容
//因為函式呼叫是有時間和空間開銷的,內聯可以避免函式內容過少,而浪費在函式呼叫的開銷上
inline void Test(int a,int b){
    std::cout<<"Hello World"<<std::endl;
}

//main.cpp
#include <iostream>//預處理語句(實際編譯前執行):查詢 名為iostream的【標頭檔案】將其所有內容複製貼上到此處
                   //iostream標頭檔案包含預先設定好的被呼叫函式的宣告:如std::cout、<< 、 ...;
#include "Test.h"

int Log(int a,int b);//int Log(int,int); 宣告其他類的函式,無需加函式體

int main() {//main函式是程式的入口,執行程式時由此開始執行程式碼,不一定需要寫返回值,預設返回0,僅適用於main函式
	std::cout << "Hello World" << std::endl;
        Log(1,2);
	std::cin.get();
}//可替代為 [#include "Test.h"],可以證明#include是複製貼上

//Log.cpp
#include <iostream>
int Log(int a,int b) {
	int result = a * b;
    Test(a,b);
	return result;
}
//標頭檔案只宣告,連結此函式
void Test(int a,int b){
    std::cout<<"Hello World"<<std::endl;
}

相關文章