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
,这对我来说真的没有意义。
例如: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。
【参考方案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,还有一些名称,例如 free
、floor
或 setbuf
(“设置缓冲区”),其中“f”只是作为自然语言字符出现。
在名称前加单个字母表示参数类型的传统在 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
:取float
s的指数
powl
:取long double
s的指数
【讨论】:
fabsf 怎么样?里面有 2 个 f,文件没有意义。【参考方案3】:一个前导的f
代表file
,一个尾随的代表formatted
;
例如,sscanf
用于扫描s
trings 以查找格式指定的模式中的值,而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
。
【讨论】:
以上是关于C 标准库函数名称中的“f”代表啥?的主要内容,如果未能解决你的问题,请参考以下文章