内置C函数的定义存储在哪里

内置C函数的定义存储在哪里,c,C,维基百科说: 每个头文件包含一个或多个函数声明、数据类型定义和宏 它说头文件只包含声明。那么,任何特定内置函数的定义写在哪里呢?如何在任何C程序中访问它?标准C库函数随编译器和其他工具链一起在库中提供。对于类unix系统,通常在名为libc和libm的库中libc通常与您的程序链接libm有时是,有时不是。函数定义存在于头文件本身中。比如说printf函数,它存储在stdio.h头文件中。如果打开该头文件,可以在第307行找到函数声明 extern int __mingw_stdio_redir

维基百科说:

每个头文件包含一个或多个函数声明、数据类型定义和宏


它说头文件只包含声明。那么,任何特定内置函数的定义写在哪里呢?如何在任何C程序中访问它?

标准C库函数随编译器和其他工具链一起在库中提供。对于类unix系统,通常在名为
libc
libm
的库中<默认情况下,code>libc通常与您的程序链接
libm
有时是,有时不是。

函数定义存在于头文件本身中。比如说
printf
函数,它存储在
stdio.h
头文件中。如果打开该头文件,可以在第307行找到函数声明

extern int __mingw_stdio_redirect__(printf)(const char*, ...);
如果在第377行向下滚动,可以找到定义:

__mingw_stdio_redirect__

int printf (const char *__format, ...)
{
   register int __retval;

   __builtin_va_list __local_argv; 
   __builtin_va_start( __local_argv, __format);
   __retval = __mingw_vsprintf( __format, __local_argv );
   __builtin_va_end( __local_argv );
   return __retval;
}

当然,这只适用于某些C发行版(或操作系统),对吗?老实说,我不知道微软做什么。真正的问题是,实现是在编译器提供的库中进行的。将“正常”替换为“在类unix系统中”,我会同意:)它们在别处。每次编译的编译器都看不到这些定义;它们已经预先编译到库中,以便在链接时与代码结合。头文件只是告诉编译器:“这里有一些在别处实现的函数;让链接器找到它们”。