What does “f” stand for in C standard library function names?

别来无恙 提交于 2019-12-03 01:49:21

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 the double alternatives). Note that this fits quite nicely with suffixing floating point literals with an f as in 1.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.

The leading f refers to the type that function operates on:

  • fgets: use gets on a FILE * handle instead of just stdin
  • fopen: open a file, and return it as a FILE * (instead of a file descriptor which the original open does)

The trailing f means that it uses a formatting string:

  • printf: print out according to the format specifier
  • scanf: read in according to the format

And combined, you get things like:

  • fprintf: print out to a particular FILE * 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 of floats
  • powl: take the exponent of long doubles

A leading f stands for file, a trailing one stands for formatted; for example, sscanf is used to scan strings 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.

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.

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.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!