编译Microsoft CRT 11(msvcrt110.dll) - 包含的正确顺序是什么?

use*_*014 5 c++ crt msvcrt visual-studio-2010 visual-studio-2012

我正在尝试自己编译Microsoft CRT 11(与VS2012一起提供的版本).

我知道在VS2008之前,这个动作完全由微软支持:

http://msdn.microsoft.com/en-us/library/k9a8ehy3(v=vs.90).aspx

但是自从VS2010以来你不应该再这样做了,我知道风险(主要是 - 编译错误,并且遇到无法解决或解决的问题)

我使用VS附带的以下目录作为输入代码和头文件:

 Code:
 C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\crt\src
 Headers:
 C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include
 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include
 C:\Program Files (x86)\Windows Kits\8.0\Include\shared
 C:\Program Files (x86)\Windows Kits\8.0\Include\um
 C:\Program Files (x86)\Windows Kits\8.0\Include\WinRT
Run Code Online (Sandbox Code Playgroud)

(到目前为止,我所做的唯一更改是从项目中删除一些MSIL源)

大多数代码已经编译.但我无法编译该文件

 C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\crt\src\assert.c
Run Code Online (Sandbox Code Playgroud)

由于错误:

 error C3861: '_ReturnAddress': identifier not found
Run Code Online (Sandbox Code Playgroud)

如果我加

 #include <intrin.h>
Run Code Online (Sandbox Code Playgroud)

它解决了.但我认为如果不直接更改代码,它应该可以解决.

当然,我经常面临新的挑战.但我认为当前的解决方案是修复头目录的包含顺序.使用头目录的顺序是什么?

Jer*_*rem 2

您可以在 Visual Studio 项目中强制包含(无需更改源代码)(尽管我不确定这是否是更好的解决方案)。

为此,请右键单击解决方案资源管理器中的 .c,然后进入 C/C++ -> 高级 -> 强制包含文件并添加 intrin.h(或在命令行中添加 /FI"intrin.h")。