c++自带函数库中的函数,与windows API函数的关系是什么,是不是库函数在实际执行时也要调用windows api函数呀,即api函数才是最终能执行的函数?
c/c++都自带了函数库,比如prinf,scanf都是自带函数库中的函数,但是这些库函数在执行时,是直接转成二进制去执行呀,还是转成windows api函数呢?是不是所有库函数在实际执行时,都是转成windows api呀,这好象是个纯理论问题,但是弄不明白,不利于下一步学习,谢谢。

解决方案 »

  1.   

    应该不是这样的。C++是可以直接操作硬件的。当然C++是可以调用系统API的。
      

  2.   

    api就是个“接口”,底层的具体实现是一样的,c++要调用底层实现,api也是调用底层实现。
      

  3.   

    API是操作系统的编程接口比如字符串操作函数、内存操作函数就可以不依靠操作系统API实现。
    又比如文件操作函数,最终需要访问硬件的函数,在保护模式下访问硬件是受到限制的,因此需要调用系统API来实现
      

  4.   

    应该是部分需要调用API的,比如和操作系统相关的一些操作
      

  5.   

    我想问的是,标准库函数与api函数是平行的关系呢?还是上下级的关系。
    同样的功能,是不是分别用库函数与api函数都可以实现呢?如果都能实现的话,哪种方法效率更高,更优化呢?
    如果不是平行的关系,那就是依存的关系,即库函数可以越过api函数自已实现某些功能吗?即二者是平行的,还是上下级的,还是二种关系都有,谢谢。
      

  6.   

    标准运行库是对操作系统调用的封装,目标是提供可移植的代码.#include <stdio.h>int main(int argc, char** argv)
    {
        FILE* fp = fopen(filename, "rb");
        fclose(fp);
        return 0;
    }像这样的代码,在windows/linux下面都能正常编译。尽管在不同的os下,文件操作的接口是不一样的。
    就是因为runtime library提供了对操作系统层次的封装。
      

  7.   

    并不一定需要谁调用谁。
    我上面说过了,比如字符串、内存操作系列的函数,可以直接使用汇编来实现,而且保证效率。
    类似fopen这类的函数,只能调用操作系统提供的接口,无论是在windows下或者是linux下,fopen都能保证实现相同的功能,虽然操作系统不同。由于事实上是调用了系统API,调用过程中运行库多出了各种消耗,如参数检查、函数堆栈保存、恢复等,效率会比直接调用API稍低。
      

  8.   

    库在不同平台有供应商实作,那取决于他们如何实现。
    目前来说,很多api还是要走WINAPI
      

  9.   

    c++自带函数库中的函数,与windows API函数的关系是什么,是不是库函数在实际执行时也要调用windows api函数呀,即api函数才是最终能执行的函数? 用Dependency查看msvcrt.dll依赖于 Kernel32.dll,而Kernel32.dll依赖于NTDLL.dll,这只说明c库依赖于系统提供的功能调用, 而api是不依赖于c库,那些依赖于
    Kernel32.dll库的函数,很显然最终api才是实现
    c/c++都自带了函数库,比如prinf,scanf都是自带函数库中的函数,但是这些库函数在执行时,是直接转成二进制去执行呀,还是转成windows api函数呢? 有些函数类似字符串处理 strcpy之类,肯定是独立实现,不依赖于api,但像fopen之类最终是调用了系统api函数CreateFile,不信你可以用ida查看一下调用关系图
    是不是所有库函数在实际执行时,都是转成windows api呀,这好象是个纯理论问题,但是弄不明白,不利于下一步学习,谢谢。 不知道楼主说必须弄清这个,否则不利于学习,我的建议是能用c库实现的,绝不用api,用c库可以跨平台
     
      

  10.   

    刚才有点错误,那个c库和c++库还是有不同的c库 msvcr**.dllc++库 msvcp**.dll这个有好多版本,微软就是整天靠改名升级,呵呵不过都由一个规律,就是c++库处理依赖于Kernel32.dll,还依赖于c库