在Visual Studio 2008中,在文件dbgheap.c
中编码了一个很好的调试堆。它实现了_CrtDumpMemoryLeaks()
。
我注意到该文件包含extern "C"
指令,这些指令似乎不被Microsoft自己的编译器所允许。代码如:
extern "C" _CRTIMP int __cdecl _CrtDumpMemoryLeaks(
void
)
{
/* only dump leaks when there are in fact leaks */
如果您尝试自行编译,只会产生错误。显然有编译器标志允许这种语法,但任何人都知道标志是什么?
答案 0 :(得分:0)
在这种情况下,事实证明,虽然代码是100%合法的C,除了这些extern "C"
限定符,它还与标志/TP
完美编译,这意味着,“编译为C ++无视文件名。“
所以,我想这就是他们所做的。
我认为MSFT忽略了将extern "C"
限定符放在某种依赖于__cplusplus
标志或其他东西的条件编译中。