Windows 为什么Visual Studio运行时库源代码存储在两个目录中?

Windows 为什么Visual Studio运行时库源代码存储在两个目录中?,windows,visual-studio,visual-c++,visual-studio-2013,Windows,Visual Studio,Visual C++,Visual Studio 2013,似乎有两个路径包含Microsoft Visual Studio运行时源文件: C:\ProgramFiles(x86)\Microsoft Visual Studio 12.0\VC\crt\src 及 C:\ProgramFiles(x86)\Microsoft Visual Studio 12.0\VC\include 有些文件出现在两个目录中,但大小不同。我特别查看了一个文件,它在两个文件中定义了相同的方法 所以我的问题是,这两条路径的用法有什么不同?我想知道我在VisualStudio

似乎有两个路径包含Microsoft Visual Studio运行时源文件:

C:\ProgramFiles(x86)\Microsoft Visual Studio 12.0\VC\crt\src

C:\ProgramFiles(x86)\Microsoft Visual Studio 12.0\VC\include

有些文件出现在两个目录中,但大小不同。我特别查看了一个文件,它在两个文件中定义了相同的方法


所以我的问题是,这两条路径的用法有什么不同?我想知道我在VisualStudio中调试时(我不是指调试模式),哪一个文件是屏幕上的代码?

,CRT位于VisualC++库堆栈的底部:其余的库依赖于它,实际上所有的本地模块也依赖于它。它包含两种内容:(1)C标准库和各种扩展;(2)进程启动和异常处理等所需的运行时功能。因为CRT位于堆栈的底部,所以它是开始稳定库的过程的合乎逻辑的地方


发件人:

(1) 我们用Visual Studio提供CRT的大部分源代码;您可以在Visual Studio安装目录中的
VC\crt\src
下找到它们


(2) 在Visual Studio 2013中,我们随产品提供的源代码中有6830条
#if
#ifdef
#ifndef
#elif
#else
指令;在VisualStudio“14”CTP中有1656个。这些数字不包括标题中的指令,它们确实包括STL源文件,这些文件在很大程度上未被重构工作触及,因此这不是一个完美的度量,但它表明了已完成的清理量。

包含的
目录包含所有公共标题。这些是可以包含在代码中的头,如
,以及这些头所需的实现头

crt\src
目录包含crt源,包括大多数用于构建crt的
.asm
.c
.cpp
文件。此目录还包含许多CRT标题的副本,在某些情况下,这些标题与
include
目录中的标题不同。这纯粹是CRT是如何建造的

当调试到CRT头中定义的内联代码时,调试器应始终选择正确的头。如果两个目录都包含一个头的相同副本,那么调试器只会选择一个,因为头是相同的,所以它选择哪一个并不重要。如果头不同,那么调试器选择哪个头取决于内联函数编译到的对象。如果对象是CRT的一部分,您将从
CRT\src
进入标题;如果对象来自某个源文件,则将从
include
进入标题。基本上,调试器应该始终能够找到头的正确副本


我们在VisualStudio“14”CTP中大大简化了这一点。
crt\src
目录中不再有任何公共头,并且
include
目录中提供的头与用于构建crt的头相同。

我认为您没有“显示文件扩展名”在资源管理器中启用,所以会混淆头文件和源文件。我所查看的文件都是头文件,因为使用模板意味着实现必须在头文件中。它们都包含相同方法的实现。我怀疑你是伪装的James McNellis,所以你应该提供适当的属性(至少,他的名字和你引用的链接)。我也看不出这是如何回答这个问题的。@angel当我单步执行代码时VS使用哪一个?当然,在crt路径中,它更完整。通常,在crt路径中有更多文件…据我所知,一个文件夹用于运行时,另一个用于兼容。。。。编辑可能会产生问题(如果某个函数丢失),我认为windows不希望该文件是可编辑的…@FrédéricHamidi Nope。詹姆斯·麦克内利斯没有伪装。:-)