深入到预定义的功能

时间:2015-04-02 05:27:47

标签: c

我想知道,预定义库函数如Prinf(),scanf(),sin(x),abs()等是如何工作的。它们是如何定义的以及这些函数体所在的位置。

如果我右键单击这些函数并在visual studio中选择视图定义,它会显示如下(对于printf)int __cdecl printf(_In_z_ _Printf_format_string_ const char * _Format,...);

如何查看这些功能的内部部分?

1 个答案:

答案 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式函数的公共代码,大约两个时钟的时钟和半千行。