我们在 C 程序中包含头文件stdio.h
以使用内置库函数。我曾经认为这些头文件包含我们可能在程序中使用的内置函数的函数定义。但很快发现并非如此。
当我们打开这些头文件(例如stdio.h)时,它只有函数原型,我看不到函数定义。我看到这样的事情:
00133 int _EXFUN(printf, (const char *, ...));
00134 int _EXFUN(scanf, (const char *, ...));
00135 int _EXFUN(sscanf, (const char *, const char *, ...));
00136 int _EXFUN(vfprintf, (FILE *, const char *, __VALIST));
00137 int _EXFUN(vprintf, (const char *, __VALIST));
00138 int _EXFUN(vsprintf, (char *, const char *, __VALIST));
00139 int _EXFUN(vsnprintf, (char *, size_t, const char *, __VALIST));
00140 int _EXFUN(fgetc, (FILE *));
00141 char * _EXFUN(fgets, (char *, int, FILE *));
00142 int _EXFUN(fputc, (int, FILE *));
00143 int _EXFUN(fputs, (const char *, FILE *));
00144 int _EXFUN(getc, (FILE *));
00145 int _EXFUN(getchar, (void));
00146 char * _EXFUN(gets, (char *));
00147 int _EXFUN(putc, (int, FILE *));
00148 int _EXFUN(putchar, (int));
00149 int _EXFUN(puts, (const char *));`
(来源:https ://www.gnu.org/software/m68hc11/examples/stdio_8h-source.html )
然后有人告诉我,函数定义可能必须在我们检查的头文件中包含的头文件之一中,所以我相信了一段时间。从那以后,我查看了很多头文件,但从未找到一个函数定义。
我最近读到,内置函数的函数定义不是直接提供的,而是以某种特殊的方式给出的。这是真的?如果是这样,内置函数的函数定义存储在哪里?由于头文件只有它们的原型,它们是如何被带入我们的程序的?
编辑:请注意,我只是作为示例显示了头文件的内容。我的问题与_EXFUN
宏无关。