1. 程式人生 > >VS2017的C++開發心得(三)VS的常用專案屬性介紹

VS2017的C++開發心得(三)VS的常用專案屬性介紹

這一篇簡單介紹下常用的專案屬性的使用。

首先是配置管理器,在屬性頁的“配置管理器”按鍵開啟:

所有專案建立好了以後都有兩個預設的配置“Debug”和“Release”。

首先這個配置是什麼意思?屬性頁裡面有很多屬性,比如第一個常規分類下:

先看看圖裡標註的幾項,這些算是比較常接觸的。然後再回到配置,可以看到圖中每一項都有個欄位名和值,比如:“平臺工具集”“Visual Studio 2017(v141)”。配置就是把這個專案相關的屬性的欄位名和值以xml的形式儲存下來,這種思路是程式開發中很重要的。儲存的檔案就是.vcxproj。來簡單看看這個檔案:

配置檔案基本就是這樣,現在來說下配置檔案的好處,就從vs自帶的Debug和Release說起。

首先談談程式開發大致分為三個階段:寫程式碼、除錯和釋出,而這兩個配置就基本就是為了方便我們開發設定的。寫程式碼和除錯使用Debug,釋出測試使用Release。這兩個配置最大的區別在哪?對於程式碼的優化程度不同,生成彙編程式碼的體量不同。這個就要扯一點編譯器的知識,編譯器就是把我們的C++語言翻譯成彙編指令。然而對於編譯器來講我們很多程式碼是很多餘的,比如:

如果改成 int main(){return algorithm(1,3);}那麼這個algorithm函式就對main產生了影響,才會進入到編譯中。如果編譯器再狠一點,真正編譯的結果應該只有一個 return -2。再扯就很遠了,回到debug和release上。我們剛才見識了編譯器的牛逼:幫我們優化程式碼。但有時候程式碼出了bug,如果憑藉優化後的程式碼,我們很難去查詢原始碼中的錯誤。

所以debug最大的功能就是保持程式碼的原始性。基本就是放棄優化了,你寫啥就是啥,所以你可以單步除錯你所有寫過的程式碼。而release除錯你會發現很多程式碼它是直接跳過的,然後程式碼執行的順序也可能和你預想的不一樣,更重要的是你的很多變數也被優化了。變數優化對於除錯程式來講是很麻煩的,因為這時候你的變數名對應的值已經不再是你預計的那個變量了。

說到這裡,大家可以想象Release生成的程式執行速度是要比debug下快很多的。所以我們最終釋出到網路下載的程式都是Release版本。

好,說完配置,配置管理器裡面還有一個選項是平臺,即“Win32”和“64”兩個。這個很好理解就是32位系統和64位系統。因為目前32位系統還未淘汰,所以都用32位就好。簡單說下,如果你程式中大量使用64位的變數型別比如:int64和double,64位程式確實有計算速度上的優勢。

最後說下Debug和Release另一個區別,可能很多人也沒注意,那就是:變數的初始化不同。

如果我聲明瞭一個int a; 它在release下的初始值是0,而在debug下是0xcccccccc 或者是0xcdcdcdcd(這兩種情況都碰到過)

這個影響最大的就是沒有賦初始值習慣的人。常常我們會去判斷指標是否為NULL再操作,如果你沒有初始化即便指標賦值失敗後指標仍然不為NULL,這時候使用這個指標就會出現"讀取0xcccccccc (或 0xcdcdcdcd)訪問衝突"的崩潰,即訪問到錯誤記憶體位置。所以一定要養成賦初始值的習慣,不要認為多餘,要是真的多餘了編譯器會幫你優化掉的。