【问题标题】:Code for printf function in C [duplicate]C中printf函数的代码[重复]
【发布时间】:2011-06-19 12:41:16
【问题描述】:

可能重复:
source code of c/c++ functions

我想知道在哪里可以找到使用的 C 代码,这样当我编写 printf("Hello World!");在我的 C 程序中知道它必须将该字符串打印到 STDOUT。我查看了 ,但我只能找到它的原型 int printf(const char *format, ...),但没有找到它内部的样子。

【问题讨论】:

  • 我认为没有可用的资源。无论如何+1,我一直想知道这一点。
  • printf 是根据 putc 定义的,因此它不需要进行任何操作系统调用。
  • @Tergiver, @R:你们都是对的。 printf 处理格式化,然后调用 putc,这可能会调用其他辅助函数,但最终会导致操作系统调用。
  • 我的意思是操作系统调用处于低得多的级别,printf 本质上是低级别 stdio 调用之上的纯库函数。

标签: c printf stdio


【解决方案1】:

这是printf的GNU版本...你可以看到它在stdoutvfprintf

__printf (const char *format, ...)
{
   va_list arg;
   int done;

   va_start (arg, format);
   done = vfprintf (stdout, format, arg);
   va_end (arg);

   return done;
}

See here.

这里是a linkvfprintf...所有的格式化“魔法”都在这里发生。

这些函数真正“不同”的唯一一点是它们使用可变参数来获取可变长度参数列表中的参数。除此之外,它们只是传统的 C。(这与 Pascal 的 printf 等价物形成对比,后者是在编译器中的特定支持下实现的……至少它是在当时。)

【讨论】:

  • 这个文件在我的linux系统下的什么位置。我正在使用 RHEL。谢谢!
  • @Jerry 它的目标代码在你的 libc 中。下载源代码的glibc源代码。
  • 最著名的库函数之一,line 98 of its source code 中有什么?一堆goto 和“这是一个黑客!!!” ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-02
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多