C标准库函数名中的"f"代表什么?

26
在C标准库函数的名称中,f代表什么意思?我注意到许多函数的名称中都有f,但对我来说这并没有太多意义。
例如: fgetsfopenprintfscanfsqrtf等。

2
前导的 f 和尾随的 f 都有意义,但它们之间没有关联。 - Iharob Al Asimi
10
第一组:"file"。意思是文件或档案。第二组:"format" 或者 "formatted"。意思是格式或者格式化。fscanf()fprintf() 都是输入输出函数。 - Paul Roub
2
如果前缀是“file”,通常表示文件。例如:(f)ile (open)。如果后缀是F,则通常表示格式。(print) (f)ormat(f)ile (print) (f)ormat - Marc B
3
f 的另一个用途是代表 float,例如 ceilf()round() 等。在 math.h 函数中,也有后缀表示返回类型。 - meaning-matters
1
这样的速记方式,以及sprintfsscanf中类似的sstr前缀之类的东西,比全名更受欢迎,因为最初只有6个字符是显著的。 - Jongware
5个回答

61

您的问题过于笼统,但我可以解释一些例子。

  • fgets, fopen, fclose, … — “f” 代表“文件”。这些函数接受或返回一个 FILE * 指针,而不是像 POSIX 函数一样使用文件号。
  • printf, scanf, … — “f” 代表“格式化”。这些函数接受一个格式字符串。
  • fprintf, fscanf — 这是上述两者的组合。
  • sinf, cosf, … — “f” 代表 float(与 double 的替代品区分开来)。请注意,这与将浮点字面量后缀为 f(如 1.5f)非常相似。
  • 最后,正如 Deduplicator points out 所指出的那样,有一些名称,例如 free, floorsetbuf(“设置缓冲区”),其中“f”只是自然语言字符。
在C语言中,使用单个字母作为前缀或后缀来表示参数类型的传统已经成为一种必要性,但在C++中由于重载而变得过时。实际上,C++中的重载是通过编译器自动在生成的符号下再次添加这些后缀来完成的,这个过程被称为name mangling

11
有时候,它只是一个前缀字母 f,比如 free,或者一个后缀字母 f,比如 sizeof - Deduplicator
1
我认为@Deduplicator的评论应该成为答案上的另一个要点。 - bolov
@Deduplicator,我认为在freesizeof的情况下,f只是一个单词的一部分 :) - peacetype

8

首字母的 f 指的是函数操作的类型:

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

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

  • printf:根据格式说明符进行打印输出
  • scanf:根据格式进行读取输入

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

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

当考虑到像 math.h 函数这样的东西时,那么尾部的 f 表示该特定函数操作的类型是 float,例如:

  • powf:对 float 进行指数运算
  • powl:对 long double 进行指数运算

fabsf怎么样?那里有两个f,文件没有意义。 - AgentM

6
一个领先的f代表file,一个尾随的代表formatted; 例如,sscanf用于按照格式指定的模式扫描字符串中的值,而fprintf将格式化的文本打印到文件中。
编辑:还有来自math.h的数学函数,它们将具有类型后缀,如atanf用于计算浮点值的反正切。

2
别忘了 math.h 函数哦 :-) - meaning-matters

4

我认为,对于fgetsfopenf代表文件。

对于printfscanf,我相信f代表格式化。至少在维基百科上scanf的文章中部分支持这一点。


1
stdio库的函数中,像freadfprintffwrite等前面的f代表文件。而像printfscanf末尾的f则代表格式。因此,printf是格式化打印,意味着你可以在其中使用像%d%s这样的东西。
在数学函数中,f后缀通常表示float

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