「分離式編譯」是因,「區分宣告與定義」是果

2021-09-26 07:10:30 字數 613 閱讀 7352

在實際程式設計中遇到這樣的問題:c++程式中有多個檔案,乙個檔案想用另乙個檔案中的變數該怎麼辦呢?

這就是「區別宣告和定義」的典型應用場景。那麼先說說為什麼要區分宣告和定義。

c++支援分離式編譯,允許將程式分割為多檔案,進而需要在檔案間共享**,乙個檔案中可能用到另乙個檔案中定義的變數,因此將變數的定義和宣告區分開。

下面說說什麼是定義,什麼是宣告,兩者之間又有什麼區別呢?

定義是建立與名字相關聯的實體,宣告使名字為程式所知。乙個檔案如果想要使用另乙個檔案定義的變數,必須包含對該變數的宣告。

定義與宣告的本質區別是:定義會為變數申請記憶體空間,也可能會為變數初始化。因此,變數的定義只能有一次,宣告可以有多次。

變數的定義與宣告的形式相同。在定義變數的檔案中,定義也是宣告,無需區分,但在想要使用變數的檔案中,只能是宣告不能是定義(否則就是重複定義變數),因此必須區分宣告和定義。那麼如何區分呢?如果想宣告而非定義變數,在變數名前加extern,且不能對其初始化。

以上說的是區分變數的定義與宣告,同樣的,類也需要區分定義與宣告。類的定義也只能有一次,一般將類的定義放在標頭檔案中。函式的定義與宣告也需要區分,函式在標頭檔案中宣告,在原始檔中定義。

分離式編譯

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

C 分離式編譯

c 開發中廣泛使用宣告和實現分開的開發形式,其編譯過程是分離式編譯,就是說各個cpp檔案完全分開編譯,然後生成各自的obj目標檔案,最後通過鏈結器link生成乙個可執行的exe檔案。不需其他操作。在編譯main.cpp的時候,不需要知道呼叫的其他檔案中的函式的具體實現,只需要有個宣告,然後會有一條c...

C 中的分離式編譯

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