C 标准库函数名称中的“f”代表啥?

Posted

技术标签:

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

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

例如:fgetsfopenprintfscanfsqrtf等。

【问题讨论】:

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

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

<b>f</b>gets<b>f</b>open<b>f</b>close、……——“f”代表“文件”。这些函数接受或返回 FILE * 指针,而不是像 POSIX 函数那样的文件编号。 print<b>f</b>scan<b>f</b>、……——“f”代表“格式化”。这些函数接受格式字符串。 <b>f</b>print<b>f</b><b>f</b>scan<b>f</b> — 这是以上两者的结合。 sin<b>f</b>cos<b>f</b>、……——“f”代表float(与double 的替代品区分开来)。请注意,这非常适合使用f 为浮点文字添加后缀,如1.5f。 最后,作为 Deduplicator points out,还有一些名称,例如 freefloorsetbuf(“设置缓冲区”),其中“f”只是作为自然语言字符出现。

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

【讨论】:

有时它只是一个前导 f,如 free,或尾随一个,如 sizeof 我认为@Deduplicator 的评论应该是答案的另一个要点 @Deduplicator 我认为在freesizeof 的情况下,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】:

我的印象是fgetsfopen f 代表文件。

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

【讨论】:

【参考方案5】:

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

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

【讨论】:

以上是关于C 标准库函数名称中的“f”代表啥?的主要内容,如果未能解决你的问题,请参考以下文章

c语言中printf与p r i n t f有啥区别

Windows API 函数名称中的“Ex”代表啥?

printf函数用于啥?

C语言中的库函数定义在啥地方啊?

请问EXCEL中的函数英文缩写各代表啥?

C++中的<math>和<cmath>有啥区别