问题
What does f
stand for in the name of C standard library functions? I have noticed that a lot of functions have an f
in their name, and this does not really make sense to me.
For example: fgets
, fopen
, printf
, scanf
, sqrtf
and so on.
回答1:
Your question in general is too general but I can explain a few examples.
- fgets, fopen, fclose, … — The ”f“ stands for “file”. These functions accept or return a
FILE *
pointer as opposed to a file number as the POSIX functions do. - printf, scanf, … — The ”f“ stands for “formatted”. These functions accept a format string.
- fprintf, fscanf — This is a combination of the above two.
- sinf, cosf, … — The “f” stands for
float
(to distinguish from thedouble
alternatives). Note that this fits quite nicely with suffixing floating point literals with anf
as in1.5f
. - Finally, as Deduplicator points out, there are some names such as free, floor or setbuf (“set buffer”) where the “f” simply appears as a natural language character.
The tradition of pre- or suffixing names with single letters that indicate the type of the arguments is a necessity in C that has become obsolete in C++ thanks to overloading. Actually, overloading in C++ works by the compiler automatically adding those suffixes again under the hood to the generated symbols by a process called name mangling.
回答2:
The leading f refers to the type that function operates on:
fgets
: usegets
on aFILE *
handle instead of juststdin
fopen
: open a file, and return it as aFILE *
(instead of a file descriptor which the originalopen
does)
The trailing f means that it uses a formatting string:
printf
: print out according to the format specifierscanf
: read in according to the format
And combined, you get things like:
fprintf
: print out to a particularFILE *
according to the format specifier
When you consider things like the math.h
functions, then the trailing f designates that the particular function operates on operands of type float
like so:
powf
: take the exponent offloat
spowl
: take the exponent oflong double
s
回答3:
A leading f
stands for file
, a trailing one stands for formatted
;
for example, sscanf
is used to scan s
trings for values in a pattern as specified by a format, whilst fprintf
prints formatted text to a file.
EDIT: Oh, and then there's math functions from math.h
that will have type suffixes like atanf
for calculating the arcustangens for float values.
回答4:
I am under the impression that for fgets
and fopen
the f
stands for file.
For printf
and scanf
I believe that the f
stands for formatted. This is at least partially supported by the Wikipedia article on scanf.
回答5:
In functions from the stdio
library, the preceeding f
in things like fread
, fprintf
, fwrite
, etc. stands for 'file'. The f
at the end of functions like printf
and scanf
stands for 'format'. Thus printf is FORMATTED printing, meaning that you can use things liek %d
and %s
in it.
In math functions a suffix of f
usually means float
.
来源:https://stackoverflow.com/questions/27949512/what-does-f-stand-for-in-c-standard-library-function-names