我需要对一些(非常)跨平台代码进行更改,并添加对在Visual C ++运行时中实现的_CrtSetDbgFlag()
函数的调用。显然,只有在针对Visual C ++运行时标头编译代码时,该函数才可用。
我想使用_MSC_VER
宏来有条件地包含这些调用。
#ifdef _MSC_VER
_CrtSetDbgFlag(value);
#endif
现在有没有合理的配置,根本不能编译?也许我可以使用Visual C ++来编译除Visual C ++以外的某些运行时的代码?
是否有可能使用Visual C ++编译代码以便定义_MSC_VER
,但在编译期间Visual C ++运行时调试内容不可用?
答案 0 :(得分:0)
理论上,是的。
如果使用动态运行时库(例如,MSVCRTxx.DLL)编译程序(通过MSVC)并且运行时DLL因任何原因(修补,检测,挂钩等)而被修改,那么某些API可能无法正常工作。该程序将大多崩溃。但是,我不认为这是一个常见的情况。
因此,如果你真的关心这个问题,你最好编译并链接这段代码静态(参见/MT compiler option)。这将保证正确实现_CrtSetDbgFlag
嵌入二进制文件。