在C语言中,printf和scanf函数的定义和主体是什么?

3

我在哪里可以找到"Borland C"中printf/scanf等类似预定义常用函数的定义/主体?还有类似getch、clrsr等函数的定义?


7
Borland实现的源代码无法获取,因为它是闭源的。但你可以下载GNU libc的源代码,这可能会更好(符合标准,质量显著更高等)。 - user529758
1
它们应该在编译器附带的“标准C库”或已经安装在系统上的“标准C库”中。printf()scanf()等的头文件是<stdio.h> - Jonathan Leffler
2
@JonathanLeffler:那肯定是声明的地方——OP明确要求定义。除非他们包含std库的源代码,否则它可能不会随产品一起提供。 - ckhan
1
除非 printf() 被内联,否则我认为这不可能是真的... - user529758
printf()函数的编译定义(例如)将会包含在相关的库中。该函数的源代码体可能不可用-完全没有。如果你需要让程序编译通过,你需要从库中获取printf()的编译定义。除非你计划修改其代码,否则你不需要printf()的源代码-而且那些计划这样做的人也不需要问这个问题。我仔细确认了提问者并非同一个人,与Borland 5.5 C Compiler not working问题无关。 - Jonathan Leffler
显示剩余4条评论
2个回答

6

你无法直接看到 printf/scanf 的原型,只能在头文件 <stdio.h> 中看到。

你可以在使用的编译器附带的标准库中找到它。


Standard C Library 在 Borland 或 GNU gcc 中的位置在哪里?我想通过观察标准函数的定义来了解它们的核心工作,例如:系统如何使用 time() 从内部核心系统获取日期? 调用 printf 时会发生什么?上述函数的定义是用汇编语言编写的吗? - abhishek-23
2
glibc的源代码可以在这里找到: http://www.gnu.org/software/libc/ 但是请注意,它的源代码并不是“易于阅读”的。 - Mats Petersson
大多数glibc并非用汇编语言编写,但出于性能原因,有一些小块是用汇编语言编写的。或者是因为在C语言中无法实现该代码。 - Mats Petersson

1

可能你无法看到预定义函数(如printf()和scanf())的源代码,因为它们已经是带有扩展名.lib的编译文件,编译器只需要函数的声明,而不需要确切的源文件,它们稍后由链接器链接以生成.exe文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接