首先:我是C / C ++的初学者(虽然我有PHP / Javascript经验)。我对语言和操作系统有几个问题。
C / C ++是一种独立于操作系统的语言吗?在所有操作系统中运行时,我用C / C ++编写的所有程序都能正常工作吗?
我是否需要一个特定于操作系统的编译器来运行我的程序?
在为不同的操作系统编写程序时,是否需要解决哪些具体问题? (任何语法更改,或必须具有特定的软件等)
将来我想创建自己的某种视频游戏,在阅读时,我注意到DirectX适用于Windows,OpenGL是多平台的。假设某些库依赖于操作系统,这是正确的吗?我在某处读过操作系统监视对某些地方的访问,以增加安全性,从而阻止直接访问视频卡。
特定操作系统的编码是否值得我花时间?或者有一点我应该对自己说,添加额外的代码会使我的程序变得复杂/混乱/阻碍我的进度并将其维护以备将来使用?
最后,我应该如何设计我的程序以使用多个操作系统?我认为保持OS特定代码尽可能分离是理想的。对于很多程序,我看到基于您的操作系统的单独下载链接。所以我很好奇他们如何管理(以便将来更新)每个代码。
答案 0 :(得分:4)
我的回答主要是关于C,但C ++的可移植性应该类似。
C / C ++是一种独立于操作系统的语言吗?
是的,语言本身(如ISO标准中所述)与系统无关且可移植。只有在按照标准编写程序并且不使用任何外部函数时才会出现这种情况(标准有一个函数列表,必须由每个编译环境实现)
在所有操作系统中运行时,我用C / C ++编写的所有程序都能正常工作吗?
没有。您可以编写一个非可移植代码(例如,在标准中声明为未定义的行为)。您还可以使用特定于操作系统的功能,例如CreateProcess
或mmap
,这将限制您的程序可移植性。
我是否需要一个特定于操作系统的编译器来运行我的程序?
您需要一个针对您的操作系统的编译器。你还需要一个标准的C库(例如BSD libc,GNU glibc,Android boinic等),它将实现标准的功能。
在为不同的操作系统编写程序时,是否需要解决哪些具体问题? (任何语法更改,或必须具有特定的软件等)
你应该以便携的方式编写程序,风格很好。有很多困难时刻,例如你不能假设int是4字节长或void*
可以转换为int
。您不需要任何其他软件。
如果您想使用任何外部库,您应该知道,该库是否可移植。
假设某些库依赖于操作系统,这是正确的吗?
有点儿。一些库移植到许多操作系统。便携性有一些限制。
答案 1 :(得分:0)
C / C ++是与操作系统无关的语言。当然,您需要一个编译器来运行您想要运行的体系结构和操作系统;为Windows编译的程序不能在Linux上运行,反之亦然。 (可以说)最好的编译器是GCC,它也适用于Windows(参见MinGW),并且默认包含在大多数Linux发行版中(尽管你可能需要单独安装它)。
关于库,是的,有些库只适用于Windows 。您在Visual Studio中使用C ++编写并使用其专有类的程序将无法在Linux上运行/编译。如果您想要为游戏提供多平台支持,请使用OpenGL而不是DirectX,它将使您的生活更轻松。
我会将程序拆分为多个分支,一个用于Windows,一个用于Linux,一个用于Mac OS,因为所有这些都有不同的GUI设计方法(除非您决定使用跨平台工具包,例如作为Qt)。
希望这会有所帮助:)
答案 2 :(得分:0)
C / C ++是一种独立于操作系统的语言吗?
是的。
在所有操作系统中运行时,我用C / C ++编写的所有程序都能正常工作吗?
如果您的操作系统有编译器/链接器,并且您只使用普通c或c ++ - 是的。但请注意,有许多操作系统依赖库(包括来自操作系统本身的API),当然这些库无法在其他操作系统中使用。存在许多库以隐藏OS差异,例如,升压。
我是否需要一个特定于操作系统的编译器来运行我的程序?
是
假设某些库与操作系统有关,这是正确的吗?
是的,见上文。
在为不同的操作系统编写程序时,是否需要解决哪些具体问题? (任何语法更改,或必须具有特定的软件等)
语法是一样的。请记住OS API或特定库。