如何在C中创建一般个性化功能,然后将它们包含在您的程序中?

时间:2014-02-22 20:35:03

标签: c function header

我是C的初学者,但我对其他一些编程语言(如Ruby和Python)有过一些经验。我非常想在C中创建一些我自己的函数,我可以在我的任何程序中使用这些函数来简化生活,但是我对如何做到这一点有点困惑。

根据我的理解,这个过程的第一部分是创建一个包含所有原型的头文件,我理解,但是根据我的理解,在头文件中包含除声明以外的任何内容是不受欢迎的,那么你还需要创建一个包含实际代码的.c文件,然后#include在你的所有程序中连同头文件吗?但如果是这样,为什么你首先需要一个头文件,因为定义一个函数也会声明它?

最后,你应该在头文件的main()函数中添加什么?你把它留空,还是不包括它?

谢谢!

3 个答案:

答案 0 :(得分:1)

函数声明让编译器知道在链接时这样的函数是可用的。该函数的定义提供了该实现,此外它用作声明。拥有多个声明没有坏处,但只能提供一个实现。此外,在使用函数之前必须至少有一个声明(或唯一的实现) - 仅在两个函数相互调用(两个函数都不能在另一个函数之前)的情况下,这单独进行前向声明。

所以,如果你有实现:

int foo(int a, int b) {
    return a * b;
}

相应的声明只是:

int foo(int a, int b);

(参数名称在声明中无关紧要,即它们可以省略或与实现中的不同。实际上你只能声明int foo();并且它可以用于上面的函数,但这是主要是传统的东西而不推荐。注意,要声明一个不带参数的函数,将void放在参数列表中,例如int bar(void);

为什么你想要只有声明的单独标题有很多原因:

  • 实现可以在一个单独的文件中,允许将代码组织成可管理的部分,并且可以自己编译,除非该文件已更改,否则无需重新编译 - 在总编译时间的大型项目中可能是一个小时,为了一个小小的变化重新编译所有内容是荒谬的。

  • 实施源可能不可用,例如,在封闭源专有库的情况下。

  • 实现可能采用不同的语言,并具有兼容的调用约定。

有关如何在多个文件中编写代码以及如何使用库的实用细节,请参阅有关C编程的书籍或教程。至于main,你不需要在标题中声明它,除非你专门从另一个函数调用main - C程序的惯例是将main作为int main(int, char**)调用开始执行。

答案 1 :(得分:0)

编译时,每个.c文件(或.cpp文件)将首先编译为自己的二进制文件。
如果一个二进制文件正在使用另一个二进制文件,则 它只知道“当时有一些名为xyz的东西” 然后链接器将它们放在一个文件中并重写每个文件的部分
正在使用其他文件的功能,
这样他们实际上知道在哪里可以找到使用过的功能。

如果您将代码放入.h文件中会发生什么:
在编译时,c文件中包含的每个h文件都将集成到c文件中 如果您在h文件中包含xyz的代码,并且您将其包含在多个c文件中,则 每个编译过的c文件都有一个xyz。然后,链接器将被混淆...
因此,功能代码必须位于自己的c文件中。

为什么要使用h文件?
因为,如果在代码中调用xyz,编译器应该如何知道 如果这是另一个c文件的功能(以及哪些参数...)
或因为xyz不存在而出错?

答案 2 :(得分:0)

c中头文件的原因适用于多个脚本中需要相同代码的情况。因此,如果您只是在一个脚本中重复相同的代码,那么只使用一个函数会更容易。同样对于头文件,是的,你需要为所有计算都包含一个.c文件。