gpt4 book ai didi

C 运行时库第 2 部分

转载 作者:太空狗 更新时间:2023-10-29 15:27:56 26 4
gpt4 key购买 nike

当我对我的旧问题有一些进一步的问题时,有人建议我创建新的问题并引用旧的问题。所以,这是原来的问题:What is the C runtime library?

好的,根据您的回答,我现在知道静态链接库是 C 标准函数的 Microsoft 实现。现在:

如果我做对了,方案如下:我想使用 printf(),所以我必须包括 <stdio.h>这只是告诉编译器有一个带有这些参数的函数 printf() 。现在,当我编译代码时,因为 printf() 是在 C 标准库中定义的,并且因为 Microsoft 决定将其命名为 C 运行时库,它会自动从 libcmt.lib 静态链接(如果在编译器中设置了 libcmt.lib)编译时间。我问,因为在维基百科上,在关于运行时库的文章中,运行时库是在运行时链接的,但是 .lib 文件是在编译时链接的,对吗?

现在,让我感到困惑的是什么。 C标准库有.dll版本。但我认为要链接 .dll 文件,您实际上必须调用 winapi 程序来加载该库。那么,如果没有静态库提供代码告诉 Windows 从 dll 加载所需函数,这些函数如何动态链接?

关于这个主题的最后一个问题 - C 标准库函数是否也调用 winapi,即使它们不像更高级的 WinAPI 函数那样是 .dll 文件?我的意思是,最后要访问帧缓冲区并打印一些东西,你必须告诉 Windows 去做,因为操作系统不能让你直接操作硬件。我认为操作系统必须以相同的方式跨相似版本支持所有 C 标准库函数,因为它们是静态链接的,并且可以不同地支持更复杂的 WinAPI 调用,因为新版本的操作系统可以在 .dll 文件中进行调整.

最佳答案

按顺序回答您的问题:

维基百科在误导您。运行时库并不总是在运行时链接,并且在您选择静态链接运行时(libcmt.lib)的情况下也不是.

运行时库有一个 .dll 版本(在运行时链接)并且编译器知道如何在 中生成适当的指令。 exe 文件告诉加载程序在运行时加载运行时库 .dll

这里有两个API。一个是 Win32 API,它是 Windows 操作系统本身支持的函数列表。另一个 API 是由 C 编程语言标准定义的 C 运行时 API。某些 C 运行时库函数(例如打开和读取文件)最终会调用 Win32 API 来执行实际的文件 I/O。其他 C 库函数,例如 strlen(),不与操作系统交互,而是使用完全在运行时库本身内部的代码实现。

关于C 运行时库第 2 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2807049/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com