如何编译包含外部指令的 C 代码"C"?



在Visual Studio 2008中,有一个很好的调试堆编码在文件dbgheap.c中。 它实现了诸如_CrtDumpMemoryLeaks() .

我注意到该文件包含Microsoft自己的编译器似乎不允许extern "C"指令。 代码如下:

extern "C" _CRTIMP int __cdecl _CrtDumpMemoryLeaks(
    void
    )
{
    /* only dump leaks when there are in fact leaks */

如果您尝试自己编译它,只会产生错误。 显然有编译器标志允许这种语法,但有人知道标志是什么吗?

在这种情况下,事实证明,虽然代码在其他方面是 100% 合法的 C,但除了这些 extern "C" 限定符之外,它还使用标志 /TP 完美编译,这意味着"编译为C++忽略文件名"。

所以,我想这就是他们所做的。

我认为 MSFT 只是忽略了将 extern "C" 限定符放入某种依赖于 __cplusplus 标志或其他东西的条件编译中。

最新更新