declaration
宣告:指將乙個名稱引入當前編譯單元,或者重新宣告乙個前面已經宣告過的名稱,宣告指定了如何解釋乙個名稱和該名稱具有的屬性;
例如:int main(void)
definition
定義:除了以下情況,宣告就是定義
a.宣告函式但不包括函式體;
b.宣告包含extern鏈結限定符,例如:extern int a;
c.宣告既沒有初始化語法,也沒有函式體;
d.類宣告中宣告靜態資料成員;
e.類名字宣告;
f.typedef宣告;
g.using宣告或者using指令;
以上情況適用於c具有的特徵,c++則完全適用,一般來說定義要為其物件分配或預留儲存空間,而宣告則不用。
translation unit
編譯單元:乙個原始檔,.c .cpp等和它所包含的檔案一起,在經過預處理之後形成乙個原始碼檔案,標準稱之為translation unit(編譯單元)包括一系列的宣告和定義;乙個program(程式)由乙個或多個編譯單元組成。編譯器將各個翻譯單元編譯為目標**(.obj),通過聯結器(linker)將這些編譯後的編譯單元(即目標**)連線成完整的指令序列(可執行檔案、靜態庫、動態庫等)。
one definition rule
一次定義規則:是指定義在所有進入連線的編譯單元中只能有一次。
觀點、例子
a:標頭檔案只放宣告
example_a.h
void function();
example_a.cpp:
#include "example_a.h"
void function()
{}
宣告和定義
宣告 向計算機介紹名字,它說,這個名字是什麼意思 而 定義 為這個名字分配 儲存空間。無論涉及到變數時還是函式時含義都一樣。無論在哪種情況下,編譯器都在 定義 處分配儲存空間。對於變數,編譯器確定這個變數佔多少儲存單元,並在記憶體中產生存放它們 的空間。對於函式,編譯器產生 並為之分配儲存空間。函式...
宣告和定義
在宣告部分出現變數有兩種情況 1 一種是需要建立儲存空間的,如 int a 2 另一種是不要建立儲存空間的,如 extern int a 前者是 定義性宣告 defining declaration 或者稱為 定義 definition 後者是 引用性宣告 referencing declarati...
宣告和定義
宣告 函式或變數會在某處出現,在此處,該函式或變數長這樣。定義 這就是這個函式或者變數。定義處,為函式或變數分配儲存空間。乙個變數或函式,只能有乙個定義。one definition rule.定義也可以是宣告。如果乙個變數或者函式有多個檔案要用,可以用extern.extern 的原理很簡單,就是...