1

我一直在关注几个 C 教程,但有一点我不确定我是否理解。一些示例显示了函数原型,但没有函数定义。教程说代码应该可以编译,即使它们不会运行。

它是否正确?缺少函数定义的 C 程序应该可以编译吗?

4

4 回答 4

4

源代码将仅使用声明进行编译,但如果调用任何函数,则如果函数未在某处定义,则会发生链接器错误。

于 2012-04-10T16:08:00.857 回答
2

是的,这是正确的。该功能可以将大程序拆分为多个源文件。

于 2012-04-10T16:07:19.860 回答
0

函数声明和函数定义有很大区别。要使用一个函数,你必须先声明这个函数,但只有在你使用的函数已经被定义的情况下,你才能编译程序。

C 编译过程是一系列步骤,将一个步骤传递给另一个步骤。在典型的编译过程中,首先运行预处理器,然后编译器为每个源文件生成汇编语言,然后汇编器将该汇编语言转换为机器代码,然后链接器将所有必要的部分放在一起。除非您声明函数,否则编译器步骤通常不会完成,但编译器并不关心函数的实际实现位置 - 它只是生成带有漏洞的汇编语言代码,其中可以放置对实际函数的调用。链接器通过调用实际函数来填补这些漏洞。

因此,您可以声明一个函数,但在另一个文件中定义它,这可能是本教程所做的。但是,您仍然必须在某处定义函数,否则您将无法获得完整的可执行二进制文件。

于 2012-04-10T16:08:19.687 回答
0

是的,有一种叫做链接的东西。这是一个解析对不同符号(如变量、函数等)的引用的过程。即使编译器对函数的定义一无所知,它也很高兴。但是,如果编译器知道函数的原型,它可以检查函数是否正确使用,以便及早标记错误。

请参阅Wikipedia或 google 以了解有关链接的更多信息。

于 2012-04-10T16:16:48.477 回答