我可以在C源文件中声明函数而不在头文件中声明它吗?

时间:2019-11-18 05:14:24

标签: c header-files function-declaration

我之所以问是因为我有一个作业,其中包括编写一个函数来查找矩阵的逆。我使用Cramer规则和行列式函数(添加到头文件中)完成了此操作。

但是,当我提交时,它使用我们得到的头文件。因此,我试图找出我是否仍可以使用行列式函数而无需在头文件中声明它。

3 个答案:

答案 0 :(得分:2)

是的,您当然可以在源文件中包含声明。确保声明在使用该函数之前。

答案 1 :(得分:0)

如果具有各自的标头,为什么必须在源文件中声明函数?仅包括将包含/应包含函数声明的头文件。

是的,您也可以在源文件中声明函数,这在小型项目中没有问题,但是如果将来以某种方式扩展或共享您的项目,它将增加复杂性,这是保持的好习惯接口(在本例中为头文件)与实现(.c文件)分开。

答案 2 :(得分:0)

,您可以在源文件而不是标题中声明一个(全局)函数。

,您不应在源文件中声明此类函数-每个此类函数都应在一个标头中声明,并且该标头应在使用该功能的任何地方(及其实现位置,当然)。

请注意,如果您在源文件中(而不是在其中实现该功能的文件中)声明该函数并且不使用标头,那么如果您需要更改该接口的接口,那么它将变得更加重要。功能-您必须搜索文件才能找到它,而不仅仅是修改标题。根据更改,您可能需要做更多的事情,但是散布在代码库中的旧声明不会发生神奇的更改,并且编译器不会发现定义已更改,并且所有地狱都可能崩溃(可能),因为您使用同一功能的不同接口来编写代码的不同部分。与C ++不同,C没有类型安全的链接。

头文件是将程序保持在一起并确保正确操作的粘合剂。如果跳过使用标头,则会失去通用标头提供的可靠性,通用标头会检查实现该功能的源代码是否与使用该功能的源代码相匹配。

很显然,仅在单个文件中使用的任何函数都应设为static,并且不应在任何标头中声明。如有疑问,请使函数(和任何文件范围变量)为static,直到您确实需要从另一个源文件访问它们为止。然后,您应该确保定义并使用头文件来声明这些函数(如果确实确定需要它们,请声明变量),并在实现源文件和使用者源文件中使用头文件。它可能是也可能不是新的标头;该信息必须在适当的标题中。

将这些渗析物应用于您的问题

您获得的标头会约束您,但源文件之外的代码将不会使用您的行列式函数,因此应将其static并仅在您的源文件中进行定义(并且可能会声明)—不应在标头中定义,因为评判代码不会对此加以注意。实现分配所要求的接口的代码可以并且将调用您的行列式函数。但这将在源文件中以及行列式函数中。如果要使用(调用)行列式函数,则需要先对其进行定义。如果在使用前定义了它,则不需要 单独的声明,但是创建一个声明不会造成任何损害。

旁注

内联函数的规则与上面概述的规则相似。如果需要,可以在头文件中创建static inline定义,并在使用该函数的任何地方使用它。还有其他方法可以处理这些问题-谨慎并确保您了解自己在做什么(并在SO上搜索以找到答案;它们在那里)。