php - 为什么有些程序是用 C++ windows-only 编写的,而有些则不是?

标签 php c++ cross-platform

这是我一直想知道的事情。

以Notepad++为例。维基百科告诉我它是用 C++ 编写的,并且仅适用于 Windows。

现在学习 PHP。维基百科告诉我这也是用 C++ 编写的,但也可以在其他操作系统上运行。

但我看到的语言比 PHP 的 C++ 还多……这是怎么做到的?他们是否用 C++ 编写了一些新代码,看到它可以工作,然后弄清楚如何在 Perl 中执行它,或者会发生什么?

最佳答案

这取决于您是否使用特定于平台的库。 Notepad++ 是一个桌面应用程序,它需要一个 GUI 工具包。虽然有像 Qt 和 wxWidgets 这样的跨平台 C++ 库,但 Notepad++ 可能使用的是 Microsoft 的特定技术。因此无法移植到其他平台。

另一方面,PHP 是一种 WEB 脚本技术,因此不需要 GUI 库。此外,与 Notepad++ 相比,人们对在许多平台上运行 PHP 更感兴趣。这是对开发人员使 C++ 代码跨平台的一种激励。

避免特定于平台的库并不是 C++ 跨平台应用程序唯一需要的东西。它通常意味着为最小公分母编码并为每个支持的平台保留不同的代码分支。尽管 C++ 是一种跨平台语言,但每个系统都有其自身的复杂性。事实上,如果要使用不同的编译器,代码在同一平台上也可能不同。尝试下载开源应用程序的 C++ 源代码,例如 PHP。您会注意到大部分代码对于所有平台都是相同的,但也会有不同的部分。有时使用预处理器指令,其他地方涉及完全不同的源文件。

因此,创建一个真正的跨平台 C++ 应用程序是一项艰巨的工作,通常是在有强烈的动机并且涉及很多人的情况下创建的。像 Notepad++ 这样的单机应用程序确实无法跨平台。

关于php - 为什么有些程序是用 C++ windows-only 编写的,而有些则不是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/552540/

相关文章:

php - 我的博客分页不起作用

c++ - 当有多个派生类时,如何使用基类指针访问派生类的函数成员?

c++ - C++中创建文件对话框的跨平台方式

java - 在 Linux 中创建跨平台安装程序

php - Laravel:Route::resource() GET 和 POST 工作,但 PUT 和 DELETE 抛出 MethodNotAllowedHttpException

php - Laravel 5 如何使用内存缓存

php - 如何为关联/外键设置 ResultSetMapping [是为什么 native 查询返回的关联始终为空]

C++数组输出地址?

C++ 引用长度性能

windows - 检测可执行文件是否存在于具有 Node 的系统路径上