我一直在关注几个C教程,有一点我不确定我理解。一些示例显示函数原型但没有函数定义。教程说,代码应该编译好,即使它们不会运行。
这是对的吗?缺少函数定义的C程序编译好吗?
答案 0 :(得分:4)
源代码将仅使用声明进行编译,但是如果调用任何函数,则如果未在某处定义函数,则会发生链接器错误。
答案 1 :(得分:2)
是的,这是正确的。该功能可以将大型程序拆分为多个源文件。
答案 2 :(得分:0)
函数声明和函数定义之间存在很大差异。要使用函数,必须先声明函数,但只有在定义了函数时才能编译程序。
C编译过程是一系列步骤,将这些步骤反馈到另一个。在典型的编译过程中,首先运行预处理器,然后编译器为每个源文件生成汇编语言,然后汇编器将该汇编语言转换为机器代码,然后链接器将所有必需的部分放在一起。除非你声明函数,否则编译器步骤通常不会完成,但编译器并不关心函数实际实现的位置 - 它只是生成带孔的汇编语言代码,可以放置对实际函数的调用。链接器通过调用实际函数来填充这些漏洞。
所以你可以声明一个函数,但是在另一个文件中定义它,这正是教程可能正在做的。但是,您仍然必须在某处定义函数,否则您将无法获得完整的可执行二进制文件。
答案 3 :(得分:0)
是的,有一些名为的链接。这是一个解析对不同符号(如变量,函数等)的引用的过程。编译器很高兴,即使它对函数的定义一无所知。但是,如果编译器知道函数的原型,它可以检查函数是否正确使用,以便错误提前标记。
请参阅Wikipedia或谷歌以了解有关链接的更多信息。