【问题标题】:What does "f" stand for in C standard library function names?C 标准库函数名称中的“f”代表什么?
【发布时间】:2015-03-13 00:35:19
【问题描述】:

f 在 C 标准库函数的名称中代表什么?我注意到很多函数的名称中都有一个f,这对我来说真的没有意义。

例如:fgets、fopen、printf、scanf、sqrtf等。

【问题讨论】:

  • 前面的f 和后面的f 都有意义,但不相关。
  • 前两个:“文件”。第二二:“格式”或“格式化”。 fscanf() 和 fprintf():两者都有。
  • 如果是前缀,一般是“文件”。例如(f)ile (open)。如果 F 是后缀,那么通常是“格式”。 (print) (f)ormat。 (f)ile (print) (f)ormat
  • “f”的另一种用法是用于float,如ceilf()、round()、...在math.h 函数中,还有表示返回类型的后缀。
  • 这样的速记,以及sprintf、sscanf 中类似的 s 和 str 前缀比全名更受欢迎,因为最初是 only 6 were significant。

标签: c naming libc


【解决方案1】:

你的问题一般来说太笼统了,但我可以解释几个例子。

在名称前加单个字母表示参数类型的传统在 C 中是必要的,由于重载,在 C++ 中已经过时。实际上,C++ 中的重载是由编译器自动将这些后缀再次添加到由名为name mangling 的进程生成的符号中。

【讨论】:

  • 有时它只是一个前导 f,如 free,或尾随一个,如 sizeof。
  • 我认为@Deduplicator 的评论应该是答案的另一个要点
  • @Deduplicator 我认为在free 和sizeof 的情况下,f 只是单词的一部分:)
【解决方案2】:

前面的 f 指的是函数操作的类型:

  • fgets:在FILE * 句柄上使用gets 而不仅仅是stdin
  • fopen:打开一个文件,并将其作为FILE * 返回(而不是原始open 所做的文件描述符)

尾随的 f 表示它使用格式化字符串:

  • printf:根据格式说明符打印出来
  • scanf:按格式读入

结合起来,你会得到这样的东西:

  • fprintf:根据格式说明符打印到特定的FILE *

当您考虑诸如 math.h 函数之类的事情时,尾部的 f 表示特定函数对 float 类型的操作数进行操作,如下所示:

  • powf:取floats的指数
  • powl:取long doubles的指数

【讨论】:

  • fabsf 怎么样?里面有 2 个 f,文件没有意义。
【解决方案3】:

一个前导的f代表file,一个尾随的代表formatted; 例如,sscanf 用于扫描strings 以查找格式指定的模式中的值,而fprintf 将格式化的文本打印到文件中。

编辑:哦,还有来自 math.h 的数学函数,它们将具有类型后缀,例如 atanf,用于计算浮点值的反正切值。

【讨论】:

  • 别忘了math.h函数啊 :-)
【解决方案4】:

我的印象是fgets 和fopen f 代表文件。

对于printf 和scanf 我相信f 代表格式化。 Wikipedia article on scanf 至少部分支持这一点。

【讨论】:

    【解决方案5】:

    在 stdio 库的函数中,fread、fprintf、fwrite 等前面的 f 代表“文件”。在printf 和scanf 等函数末尾的f 代表“格式”。因此 printf 是 FORMATTED 打印,这意味着您可以在其中使用诸如 %d 和 %s 的东西。

    在数学函数中,f 的后缀通常表示float。

    【讨论】:

      猜你喜欢
      • 2020-12-17
      • 1970-01-01
      • 2018-10-23
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      相关资源
      最近更新 更多