是否有其他平台的Visual C ++运行时实现?

时间:2010-02-18 14:33:49

标签: c++ visual-c++ runtime

Visual C ++运行时是否意味着Windows平台?我的意思是,如果我编写的程序只直接使用特定于VC ++运行时的函数而不直接调用Windows API函数,它是否可以重新编译并在除Windows之外的任何操作系统上运行?我不是指Windows系统模拟器,我的意思是为其他操作系统准备好VC ++运行时的实现。

5 个答案:

答案 0 :(得分:4)

Visual C ++运行时包含标准C ++库和特定于平台的辅助功能。 Windows API是Windows SDK的一部分,不包含在Visual C ++运行时中。

在不同平台上编译C ++程序时,您将使用该平台的C ++库实现。

  

我的意思是,如果我编写的程序只直接使用特定于VC ++运行时的函数而不直接调用Windows API函数,是否可以重新编译并在除Windows之外的任何操作系统上运行?

只要您只使用标准C ++函数和类,是的。

  

我不是指Windows系统模拟器,我的意思是为其他操作系统准备好VC ++运行时。

运行时本身仅在Windows上可用,因为该实现非常特定于平台。正如我上面提到的,只有在不使用MS特定功能时,才能获得源级兼容性。

答案 1 :(得分:2)

“VC ++ Runtime”是指Microsoft在Windows之上实现标准C和C ++库,所以是的,从这个意义上来说它确实意味着Windows平台。 (事实上​​,它是根据Win32 API实现的,因为操作系统需要支持标准库可以为您做的所有这些伟大的事情。)

但是,由于它只是C和C ++语言标准库的实现,只要您小心编写可移植代码(不要假设类型大小,不要使用平台/编译器特定的扩展来标准,提防具有不同名称/参数等的函数等。),您应该能够为任何具有C / C ++标准库实现的平台重新编译它。

答案 2 :(得分:1)

这是两个不同的问题。如果您坚持使用C和RTL的便携式部件,您当然可以针对不同的平台重新编译 - 我每天都会这样做。但VC ++生成的可执行文件只能在Windows上运行 - 它是Windows可执行文件:)

但是,不要假设整个VC ++运行时库都是可移植的。有些函数是(例如strlen()),有些函数存在但名称不同(strnicmp()),有些函数在其他平台上根本就没有。

答案 3 :(得分:1)

曾经有可能(Visual C ++ 4.x?)使用MFC / Visual C ++定位Mac(68000处理器),但project已被放弃了很长时间。

Microsoft Mobile / Smart Device是最新版本的Visual Studio支持的某种交叉开发。

答案 4 :(得分:1)

  

我的意思是,如果我编写的程序只直接使用特定于VC ++运行时的函数而不直接调用Windows API函数,是否可以重新编译并在除Windows之外的任何操作系统上运行?

如果“VC ++运行时特有的功能”是指标准库函数,那么答案是肯定的(但有一些警告)

如果您指的是VC运行时但非标准的非标准函数,例如_snprintf(),那么答案通常是否定的(但是其他实现可能会支持它们,因此您可能会离开用它)。

第一个答案的警告是,您的程序可能会利用特定于实现(甚至未指定或未定义)的行为,这可能使它在不同平台上的工作不同,即使您的程序只使用标准库函数。在大多数情况下,这些问题不会成为问题,但在编写您想要移植的代码时需要考虑这些问题。