【问题标题】:How can I see original form of printf function in C? [duplicate]如何在 C 中查看 printf 函数的原始形式? [复制]
【发布时间】:2020-12-22 17:02:13
【问题描述】:

我使用 GCC 作为编译器。我想知道 printf 函数的原始形式。所以我在 /usr/include 中找到了 stdio.h 文件(我在 GCP 中使用的是 CentOS 8.2)。

当我打开 stdio.h 文件并找到 printf 时,写的是这样的

extern int printf(const char *__restrict __format, ...);

这句话中的 extern 和 ... 是什么?如何以及在哪里可以看到 printf 函数的原始形式?

【问题讨论】:

  • “原始形式”是指函数的源代码吗?
  • 作为初学者,看printf的源代码不会学到太多东西,这是一个非常复杂的函数。谷歌 printf source code gnu 你会发现很多实现。 your printf 的源代码可能在某处提供,但如果没有更多信息,我们无法提供更多信息。
  • 你可以看这里github.com/Intersec/lib-common/blob/master/src/core/… 但是printf不好跳进去
  • Standrad 定义:int printf(const char *format, ...); 这是您的参考。其他一切都是实现细节,不应成为主要关注点。

标签: c


【解决方案1】:

extern 表示功能可见性扩展到整个程序。而对于...,它代表格式说明符%d - %ld etc. 的未指定数量的参数。这意味着printf 可以在您想打印包含 0 个变量和 x 变量等的字符串时起作用。

【讨论】:

    【解决方案2】:

    这句话中的 extern 和 ... 是什么?如何以及在哪里可以看到 printf 函数的原始形式?

    extern 表示外部链接。它告诉链接器这个符号应该在被链接的对象或库之一中找到。

    printf 有不同的实现。在大多数情况下,所有printf 变体,例如vprintffprintf 等最终都会调用vfprintfvfprintf这个函数本身就很复杂。大多数实现使用查表方法,其中调用对应于% 格式化程序之一的处理程序来格式化输入。

    你可以在这里看到glibc(标准库的一种实现)中vfprintf的实现

    https://github.com/bminor/glibc/blob/master/stdio-common/vfprintf-internal.c

    【讨论】:

      猜你喜欢
      • 2014-11-16
      • 2013-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多