我想知道,预定义库函数如Prinf(),scanf(),sin(x),abs()等是如何工作的。它们是如何定义的以及这些函数体所在的位置。
如果我右键单击这些函数并在visual studio中选择视图定义,它会显示如下(对于printf)int __cdecl printf(_In_z_ _Printf_format_string_ const char * _Format,...);
如何查看这些功能的内部部分?
答案 0 :(得分:1)
如果您的实现附带(或以其他方式提供)其运行时库的源代码,那么您将找到它。
首先应该问问自己,是否必要。 ISO标准的重点是确保每个实现都是相同的抽象机器,无论底层代码如何。
这意味着您通常只需编写标准代码,而不必担心,例如,qsort
是否实现为快速排序,合并排序,甚至是否,如果它不太关注性能,冒泡排序或BOGO排序。
请注意,它将遵循标准中规定的规则。
如果仍想要检查库的来源,gcc
之类的内容将使用glibc
(可用here)和Visual C ++源代码与产品一起。在我的版本(VS 2013)上,它位于C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\crt\src
。
例如,由于您表达了对abs()
函数的一条评论感兴趣,因此这里列出了上面列出的目录中abs.c
的VC ++变体:
int __cdecl abs (int number) {
return (number >= 0 ? number : -number);
}
那里有什么令人惊讶的东西,但像output.c
这样的东西,它提供了所有printf
式函数的公共代码,大约两个时钟的时钟和半千行。