C语言头文件stdio.h里只有函数原型,那么函数定义在哪里?

论坛 期权论坛 期权     
爱的用户   2020-2-14 23:36   10562   5
比如说printf,在stdio.h中只有原型int printf(const char*, ...);
那么printf的定义在哪里可以找到呢?它是用C语言定义的还是用其他语言定义的?
分享到 :
0 人收藏

5 个回复

倒序浏览
2#
热心小回应  16级独孤 | 2020-2-14 23:36:59
以Dev-C++为例, 在我的电脑上它附带的函数库文件在C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2目录中,打开这个目录你可以看到有很多lib开头的文件,这些就是编译器所附带的库文件:

再以CentOS下的GCC为例,它的库文件保存在/usr/lib/gcc/x86_64-redhat-linux/4.8.5中:

虽然他们是两个不同的平台实现,但是可以看到有些文件名是相同的,例如libgcc.a
这些库文件都是二进制形式的,换句话说它们已经被编译过。如果你想看源代码,GNU C运行库是开源的,必要的时候你可以从https://www.gnu.org/software/libc/下载它的源代码。
下载以后,你就可以看到所有标准库函数的源代码, 以下是printf.c:


3#
热心小回应  16级独孤 | 2020-2-14 23:37:00
就你下盗版游戏的时候经常要你装的那些vcredist里面
4#
热心小回应  16级独孤 | 2020-2-14 23:37:01
printf的实现或者说定义属于C运行时库的一部分,在Windows上由Microsoft VC Runtime Library(msvcrt.dll)提供,在linux上由libc(/usr/lib/libc.so)提供。
5#
热心小回应  16级独孤 | 2020-2-14 23:37:02
其实你可以这样理解,类似java需要jvm运行时,C语言也是需要运行时的,这个运行时负责执行标准库函数,一般由操作系统实现不是虚拟机而已。
6#
热心小回应  16级独孤 | 2020-2-14 23:37:03
前面的已经说的很明白了,我补充一下,c语言和c艹的标准库是一波人定义的,他们叫什么委员会,但写实现的是另一波人,不同的编译器实现的都不一样。也就是制定标准的和干活的不是一帮人。制定标准的人只是告诉你,啊,标准库要有个printf能格式化输出,你具体怎么搞出来没人管你。这个和Java啊,Python那些发布标准的和实现的基本上是一波人的语言不一样。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:342608
帖子:68643
精华:1
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP