是否有使用Visual C ++编译代码但Visual C ++运行时不可用的情况?

时间:2013-02-07 13:24:46

标签: c++ visual-c++ compilation conditional-compilation

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

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

#ifdef _MSC_VER
_CrtSetDbgFlag(value);
#endif

现在有没有合理的配置,根本不能编译?也许我可以使用Visual C ++来编译除Visual C ++以外的某些运行时的代码?

是否有可能使用Visual C ++编译代码以便定义_MSC_VER,但在编译期间Visual C ++运行时调试内容不可用?

1 个答案:

答案 0 :(得分:0)

理论上,是的。

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

因此,如果你真的关心这个问题,你最好编译并链接这段代码静态(参见/MT compiler option)。这将保证正确实现_CrtSetDbgFlag嵌入二进制文件。