C “a”究竟是什么;预定义函数";?

C “a”究竟是什么;预定义函数";?,c,function,C,Function,我的教科书编写了预定义函数的定义,如下所示: 预定义意味着它是一个已经编写和编译的函数,并在链接时与我们的程序链接在一起 我就是不明白这是什么意思。你能解释一下吗?我实际上是C语言的初学者。我搜索过编译和链接的术语。但这个定义对我来说没有意义。 我的教科书还写道,printf也是一个预定义的函数。使用库函数是一个更正确(更合适)的术语 更详细地说,库包含预先编写和编译的代码。要使用代码(示例:函数),您需要将库链接到应用程序并使用库代码(示例:调用函数)。您将获得该功能,就像库中的代码集成到应用

我的教科书编写了预定义函数的定义,如下所示:

预定义意味着它是一个已经编写和编译的函数,并在链接时与我们的程序链接在一起

我就是不明白这是什么意思。你能解释一下吗?我实际上是C语言的初学者。我搜索过编译和链接的术语。但这个定义对我来说没有意义。 我的教科书还写道,
printf
也是一个预定义的函数。

使用库函数是一个更正确(更合适)的术语

更详细地说,库包含预先编写和编译的代码。要使用代码(示例:函数),您需要将库链接到应用程序并使用库代码(示例:调用函数)。您将获得该功能,就像库中的代码集成到应用程序中一样

阅读和


注意:不是所有的图书馆都是标准图书馆。

如果我是你,我就不会相信那本教科书。第5页上写着:

C允许不同形式的主语句。以下表格 允许

  • main()

  • int main()

  • void main()

我就到此为止
void main()
在标准化C中从未被允许。类似地,它说:

注:一些作者建议纳入该声明

#include <stdio.h>
#包括
在所有使用任何输入/输出库的程序开始时 功能。但是,函数printf不需要这样做 和scanf,它们被定义为C语言的一部分

依赖
printf
(或任何库函数)的隐式定义是非常糟糕的做法

这让我相信作者使用的“defined”充其量是不可靠的,因为“definition”和“prefined”在C规范中具有确切的含义


一种宽泛的解释是,库函数通过编译器提供的C库或系统上的C库(通常是glibc)链接进来。您可以在linux系统上运行
ldd
,查看哪个动态库用于您的程序。

哪本教科书?(只是出于好奇)为什么要投反对票?有什么问题?有“预定义标识符”和“预定义宏名称”。这些是标准中“预定义”的唯一用途。其他一切都只是“闲聊”。可能会得到一本更好的书(因为它没有清楚地定义它所使用的术语,这是质量不好的标志)。@uhosomebodyneedsappup实际上使用了它(参见我之前的评论),但与函数没有任何关系。正如@SouravGhosh在回答中所说的,这些是库函数。但是,图书馆功能的定义是否如书中所述?如果是,那怎么办?更好?你们男人“正确”。“预定义”函数毫无意义,即使对于内部函数也是如此。@Olaf ok,这样更好。:)自C99以来,
main
被强烈劝阻,并被列为淘汰特征。关于函数的部分完全是胡说八道。必须声明所有函数。该标准要求对隐式声明发出警告。那本书是关于K&R-C还是C90的?好的,这本书应该被禁止在任何C类书籍的列表中。@HardeyPandya没有人责怪你——你来问得很好:)@UhoSomebodyNeedsApper:任何仍然教授ANSI-C(又名C89/90)的书都应该立即被禁止。初学者至少应该从现代C99开始。如果他们在工作中遇到一个C90项目,他们应该能够1)试着让公司进入现代,如果这不可能,那么2)很容易学会中世纪C的陷阱。如果C90只是被准确地教授,我就不会为它操心太多。@Olaf对于独立环境也是如此。如果GCC决定在超级复制程序手工编写的SSE3程序集memcpy上使用其内置memcpy,则性能可能会降低。无论是否存在C库,都很难让它不这样做。