There seem to be two paths containing Microsoft Visual Studio runtime source files:
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\crt\src
and
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include
Some files appear in both directories, but have different sizes. I looked at one file in particular and it had the same method defined in both files.
So my question is, what is the difference in usage for the two paths? I would like to know when I am debugging (I dont mean debug mode) in Visual Studio, which file is the code on the screen?
If you've already installed it and want to change the location, you must uninstall Visual Studio and then reinstall it. In the Shared components, tools, and SDKs section, select the folder where you want to store the files that are shared by side-by-side Visual Studio installations.
By default, Visual Studio builds each project in a solution in its own folder inside the solution. You can change the build output paths of your projects to force all outputs to be placed in the same folder.
In the latest version of Visual Studio 2019, you'll find the redistributable files in the %VCINSTALLDIR%Redist\MSVC\v142 folder. In both Visual Studio 2017 and Visual Studio 2019, they're also found in %VCToolsRedistDir% .
Open the project's Property Pages dialog box. For details, see Set C++ compiler and build properties in Visual Studio. Select the Configuration Properties > C/C++ > General property page. Modify the Additional Include Directories property.
The include
directory has all of the public headers. These are headers that you can include in your code, like <stdio.h>
and <type_traits>
, plus implementation headers required by those headers.
The crt\src
directory contains the CRT sources, including most of the .asm
, .c
, and .cpp
files used to build the CRT. This directory also has a copy of many of the CRT headers, and in some cases these headers are different from what are in the include
directory. This is purely an artifact of how the CRT was built.
When debugging into inline code defined in the CRT headers, the debugger should always pick the right header. If both directories contain the same copy of a header, then the debugger will just pick one and since the headers are the same it doesn't matter which one it picks. If the headers are different, then which header the debugger picks depends on the object into which the inline function was compiled. If the object is part of the CRT, you'll step into the header from crt\src
; if the object is from one of your source files, you'll step into the header from include
. Basically, the debugger should always be able to find the correct copy of the header.
We've greatly simplified this in the Visual Studio "14" CTP. There are no longer any public headers in the crt\src
directory, and the headers that are shipped in the include
directory are the same ones that were used to build the CRT.
The CRT sits at the bottom of the Visual C++ libraries stack: the rest of the libraries depend on it and practically all native modules depend on it as well. It contains two kinds of stuff: (1) the C Standard Library and various extensions, and (2) runtime functionality required for things like process startup and exception handling. Because the CRT sits at the bottom of the stack, it is the logical place to start the process of stabilizing the libraries.
From The Great C Runtime (CRT) Refactoring by James McNellis:
(1) We ship most of the sources for the CRT with Visual Studio; you can find them in the Visual Studio installation directory under VC\crt\src
.
(2) In Visual Studio 2013 there are 6,830 #if
, #ifdef
, #ifndef
, #elif
, and #else
directives in the sources that we ship with the product; in the Visual Studio "14" CTP there are 1,656. These numbers do not include directives in headers and they do include the STL source files which are largely untouched by this refactoring effort, so this isn't a perfect measurement, but it's indicative of the amount of cleanup that's been done.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With