我正在学习C++,我刚刚开始学习一些Qt(编写GUI程序的https://en.wikipedia.org/wiki/Qt_(software%29)'s功能)。我问自己以下问题:
C++以前没有语法,无法要求操作系统提供窗口或通过网络进行通信(我承认,API也不完全理解),它是如何突然通过用C++编写的库获得这样的功能的呢?在我看来,这一切似乎都是循环的。在这些库中,您可能会想出什么C++指令?
我意识到,对于一个经验丰富的软件开发人员来说,这个问题似乎微不足道,但我已经研究了几个小时,却没有找到任何直接的回应。这已经到了我无法遵循关于Qt的教程的地步,因为库的存在是我所无法理解的。
发布于 2014-07-28 10:39:52
计算机就像洋葱,它有很多层,从纯硬件的内核到最外层的应用层。每个层将自身的部分暴露给下一个外层,以便外层可以使用一些内部层的功能。
例如,在Windows的情况下,操作系统为运行在WIN32上的应用程序公开所谓的Windows。Qt库使用该API向自己的API提供使用Qt的应用程序。您使用Qt,Qt使用WIN32,WIN32使用更低级别的Windows操作系统,等等,直到硬件中出现电信号为止。
发布于 2014-07-28 10:41:05
你是对的,一般来说,库不能使任何已经不可能的事情成为可能。
但是,这些库不必用C++编写才能被C++程序使用。即使它们是用C++编写的,它们也可能在内部使用没有用C++编写的其他库。因此,C++并没有提供任何方法来实现它,这并不能阻止它被添加,只要在C++之外有一些方法可以做到。
在相当低的级别上,C++ (或C)调用的一些函数将在程序集中编写,程序集包含在C++中执行任何不可能(或不容易)的操作所需的指令,例如调用系统函数。在这一点上,这个系统调用可以做任何你的计算机能够做的事情,仅仅是因为没有什么可以阻止它。
发布于 2014-07-28 13:45:10
C和C++有两个属性,它们允许OP所讨论的所有这些扩展性。
在内核或基本的非保护模式平台中,像串口或磁盘驱动器这样的外围设备以与RAM相同的方式映射到内存映射中。内存是一系列开关,翻转外围设备的开关(比如串行端口或磁盘驱动程序)可以让外围设备做有用的事情。
在受保护模式的操作系统中,当您想要从用户空间访问内核时(例如,在写入文件系统或在屏幕上绘制像素时),则需要进行系统调用。C没有指令进行系统调用,但是C可以调用汇编程序代码来触发正确的系统调用,这就是允许C代码与内核对话的原因。
为了使编程更容易,系统调用被包装在更复杂的函数中,这些函数可以在自己的程序中执行一些有用的功能。一个可以直接调用系统调用(使用汇编程序),但使用平台提供的包装器功能可能更容易。
还有另一个级别的API比系统调用更有用。以malloc为例。这不仅会调用系统获得大内存块,而且将通过执行所有保持正在发生的事情的书籍来管理这个内存。
Win32 API使用公共平台小部件集封装了一些图形功能。Qt以跨平台的方式包装Win32 (或platform ) API,从而更进一步。
从根本上说,尽管C编译器将C代码转换为机器代码,而且由于计算机是为使用机器代码而设计的,所以您应该期望C能够完成狮子共享或计算机所能做的事情。包装库所做的就是为您完成繁重的工作,这样您就不必这样做了。
https://stackoverflow.com/questions/24993282
复制相似问题