備注:由於本人C++水平有限,以下內容僅僅是參考。希望不要誤導大家,有問題請給我信息。
由於之前學習C#的先入為主的感覺,導致學習C++有很多問題一開始沒有想明白。
在學習C++之前我們需要了解C++文件結構。C++的代碼文件有頭文件(*.h)和代碼文件(*.cpp)之分。兩者合起來我們稱為單元文件。實際上 編譯器也是一個cpp一個cpp文件的編譯然后再連接各個編譯文件的結果文件(C++編譯過程會在以后篇章介紹)。C++/C程序的頭文件以“.h”為后 綴,C程序的定義文件以“.c”為后綴,C++程序的定義文件通常以“.cpp”為后綴(也有一些系統以“.cc”或“.cxx”為后綴)。
大多數情況下頭文件和代碼文件是一一對應的。在頭文件里主要寫一些函數(全局函數),變量(全局變量),數據類型的定義(其實就是用戶自定義類,類中的函數實現一般在代碼文件中)等聲明。這樣可以在多個代碼文件中共享這些函數,變量和數據類型的定義等。
頭文件
頭文件是不被編譯的,cpp中引用頭文件實際上是當預編譯的時候將頭文件中的內容插入到cpp文件中。因此變量的定義、函數的定義不要寫到頭文件中。因為頭文件很可能要被多 個cpp引用。當連接的時候可能會出現重復定義的情況。
有2種常見的錯誤:
1>同一編譯單元的頭文件重復引用,可能會出現重復定義
2>不同編譯單元引用同一頭文件,鏈接時發現重復定義
1、為了防止頭文件被重復引用,應當使用 #ifndef #define ... #endif 結構
但是是不是所有的頭文件加上這個,能防止出現重復引用導致重復定義的錯誤呢?
答案是否定的。在不同的編譯單元引用同一頭文件的時候,還是會出現重復定義的錯誤。
這種結構只能防止第一種情況下的錯誤。
2、用 #include <test>或者<test.h>格式來引用標准庫的頭文件(編譯器將從標准庫目錄開始搜索)。
用 #include “test”或者"test.h" 格式來引用非標准庫的頭文件(編譯器將從用戶的工作目錄開始搜索)。
接下來講解:C++ 宏和預編譯 預編譯頭
ps:VC中編繹C和C++是分大小寫的
靜靜的努力尋找屬於自己的