-1

我需要对一些(非常)跨平台代码进行更改,并添加对_CrtSetDbgFlag()在 Visual C++ 运行时中实现的函数的调用。显然,该函数仅在针对 Visual C++ 运行时标头编译代码时可用。

我想使用_MSC_VER宏来有条件地包含这些调用。

#ifdef _MSC_VER
_CrtSetDbgFlag(value);
#endif

现在是否有任何合理的配置无法编译?也许我可以使用 Visual C++ 针对 Visual C++ 以外的一些运行时编译代码?

是否有可能使用 Visual C++ 编译代码以便_MSC_VER定义,但在编译期间无法使用 Visual C++ 运行时调试的东西?

4

1 回答 1

0

理论上,是的。

如果程序是使用动态运行时库(例如,MSVCRTxx.DLL)编译的(由 MSVC),并且运行时 DLL 已因任何原因(修补、检测、挂钩等)被修改,则某些 API 可能无法正常工作。该程序大多会崩溃。但是,我不认为这是一个普遍的情况。

所以,如果你真的关心这个问题,你最好静态编译和链接这段代码(见/MT 编译器选项)。这将保证_CrtSetDbgFlag嵌入到二进制文件中的正确实现。

于 2013-02-07T13:35:06.920 回答