1. 程式人生 > >宣告、定義區別(變數、函式、類)

宣告、定義區別(變數、函式、類)

相同點

對編譯器來說都是符號,宣告就會在符合表中留下一列等待填充的空白,即不完整的等待填充一行,而定義就是符合表中完整的一行。在編譯cpp成obj時,這裡面變數、函式和類三種東西看成並列地位,即都是一個名字,符號表中的一列(可以先簡單認為obj的符號表中只有兩列即符號名字和地址)

不同點

在使用上這三種符號的宣告和定義有所區分:【定義類和變數時原子性,定義類不是原子性,還要用這個類去定義別的東西】
具體來講:

  1. 對於變數:由於變數的定義和宣告是同一語句,如 int a; 所以規定宣告必須使用extern關鍵字以區別是宣告而不是定義。
  2. 對於函式:由於定義有個大括號包住的函式體,而宣告沒有大括號的函式體,所以它的宣告和定義不需要多餘的如extern關鍵字,即大括號的是定義,不帶的是宣告。
  3. 對於類:在形式上和函式一樣,名字上帶大括號的是定義(定義一個型別),不帶大括號的是宣告。但他有特殊之處,即不能先宣告類(即不帶大括號),然後定義這個宣告的類的例項,再在後面或其他cpp檔案中定義具體的類。變數和函式是可以先宣告然後在連結的時候從其他檔案中找的。