C 分離式編譯

2021-10-10 18:15:45 字數 640 閱讀 4634

c++開發中廣泛使用宣告和實現分開的開發形式,其編譯過程是分離式編譯,就是說各個cpp檔案完全分開編譯,然後生成各自的obj目標檔案,最後通過鏈結器link生成乙個可執行的exe檔案。不需其他操作。

在編譯main.cpp的時候,不需要知道呼叫的其他檔案中的函式的具體實現,只需要有個宣告,然後會有一條call的指令,在鏈結的時候去其他的檔案中尋找該函式的具體實現,如果在鏈結的時候找不到這樣乙個函式,將會發生乙個鏈結期錯誤。

下面舉例說明:

包含標頭檔案:宣告標頭檔案、標準庫

#include 「test.h」

//作用是讓編譯器檢查宣告語句與定義語句是否相同

#include

//必要,若沒有,編譯的時候std::cout未宣告

void

fun(

)

包含標頭檔案:宣告標頭檔案、標準庫

#include 「test.h」

intmain()

#ifndef test_h   

#define test_h

intfun()

;#endif

// !test_h

分離式編譯

最近的工作中需要用到類模板。宣告模板類放在標頭檔案裡,然後犯了個錯誤把 類的成員函式定義按照慣例放在了乙個cpp檔案裡。編譯雖然過了,但是鏈結也會出問題。這裡開始找找原因,原來類模板不支援分離編譯。c 編譯過程分幾步。第一 預編譯 這一步可以粗略的認為只做了一件事情,那就是 巨集展開 也就是對那些 ...

C 中的分離式編譯

隨著程式越來越複雜,我們希望把程式的各個部分分別儲存在不同的檔案中。我們可以將原來的程式分成三個部分 pragma once ifndef game h define game h include using namespace std struct game void inputgame game...

C 不支援模版的分離式編譯

1 c 不支援模版的分離式編譯,為什麼?c 是分別,單獨編譯,對於每個cpp檔案,預編譯為編譯單元,這個編譯單元是自包含檔案,編譯的時候,不需要其他的檔案,編譯好了,生成obj檔案,然後連線成exe檔案。在編譯的時候,使用乙個東西,如果這個東西就在當前位置,當然好了。如果不再當前位置,也沒關係,只要...