2014-06-13 36 views
7

似乎有是包含微軟的Visual Studio運行庫的源文件的兩個路徑:爲什麼Visual Studio運行時庫源代碼存儲在兩個目錄中?

C:\ Program Files文件(x86)的\微軟的Visual Studio 12.0 \ VC \ CRT \ SRC

C:\ Program Files文件(x86)的\微軟的Visual Studio 12.0 \ VC \包括

某些文件s出現在兩個目錄中,但具有不同的大小。我特別查看了一個文件,並在兩個文件中定義了相同的方法。

所以我的問題是,兩條路徑的用法有什麼區別?我想知道當我在Visual Studio中調試時(我不是指調試模式),哪個文件是屏幕上的代碼?

+2

我認爲你沒有在資源管理器中啓用「顯示文件擴展名」,所以令人困惑的標題和源文件。 – Dai

+0

我正在查看的文件都是頭文件,因爲使用模板意味着實現必須位於頭文件中。它們都包含相同方法的實現。 – mezamorphic

回答

1

CRT位於Visual C++庫堆棧的底部:其餘庫取決於它,實際上所有本機模塊都依賴於它。它包含兩種東西:[1] C標準庫和各種擴展,以及[2]運行時功能,如進程啓動和異常處理。由於CRT位於堆棧的底部,因此它是啓動穩定庫的過程的合理位置。


(1)我們用Visual Studio提供CRT的大部分源代碼;您可以在VC \ crt \ src下的Visual Studio安裝目錄中找到它們。

(2)在Visual Studio 2013有6830 #if#ifdef#ifndef#elif,和#else指令中,我們的產品附帶的來源;在Visual Studio「14」CTP中有1,656個。這些數字不包含頭文件中的指令,它們包含STL源文件,這些文件在很大程度上都未受到重構的影響,所以這不是一個完美的測量,但它表明已完成的清理量。

編輯1:

條信息:

書面:James McNellis

日期:10 Jun 2014 9:00 AM

網址:http://blogs.msdn.com/b/vcblog/archive/2014/06/10/the-great-crt-refactoring.aspx

+3

我懷疑你是詹姆斯麥克奈利斯,所以你應該提供*正確的歸屬*(至少,他的名字和一個鏈接[原文])(http://blogs.msdn.com/b/vcblog/ archive/2014/06/10/the-great-crt-refactoring.aspx)你正在引用)。我也不明白這是如何回答這個問題的。 –

+1

當然,我現在將編輯我的帖子...謝謝 – angel

+0

@angel當我單步執行代碼時,哪一個VS會使用?當然,crt路徑中的 – mezamorphic

9

include目錄擁有所有市民他aders。這些頭文件可以包含在代碼中,如<stdio.h><type_traits>,以及這些頭文件所需的實現頭文件。

crt\src目錄包含CRT來源,包括大部分用於構建CRT的.asm.c.cpp文件。該目錄也有許多CRT標題的副本,在某些情況下,這些標題與include目錄中的標題不同。這純粹是CRT如何構建的人爲因素。

當調試到在CRT頭文件中定義的內聯代碼時,調試器應該總是選擇正確的頭文件。如果兩個目錄包含相同的頭部副本,那麼調試器將只選擇一個,並且由於頭部相同,所以它選擇哪一個並不重要。如果標題不同,那麼調試器選擇哪個頭取決於內聯函數編譯的對象。如果對象是CRT的一部分,那麼您將從crt\src進入標題;如果對象來自其中一個源文件,那麼您將進入include的標題。基本上,調試器應該始終能夠找到正確的頭部副本。

我們已經在Visual Studio「14」CTP中大大簡化了它。 crt\src目錄中不再有公共標題,並且include目錄中的標題與用於構建CRT的標題相同。

相關問題