如何创建 C 头文件 [关闭]

Posted

技术标签:

【中文标题】如何创建 C 头文件 [关闭]【英文标题】:How can I create C header files [closed] 【发布时间】:2011-02-19 08:32:29 【问题描述】:

我希望能够在一个头文件中创建一组函数,我可以将它们#include 包含在我的一个 C 程序中。

【问题讨论】:

使用文本编辑器? 如果我按照正确的方式进行操作,您想要创建一个库,类似于标准 C 库,因此您包含一个带有函数定义的头文件,然后在构建最终可执行文件时链接到该库。对吗? 【参考方案1】:
    打开您喜欢的文本编辑器 创建一个名为whatever.h的新文件 把你的函数原型放进去

完成。

例如whatever.h

#ifndef WHATEVER_H_INCLUDED
#define WHATEVER_H_INCLUDED
int f(int a);
#endif

注意:包括防护(预处理器命令),感谢卢克。他们避免在同一个编译中两次包含同一个头文件。另一种可能性(在 cmets 中也提到过)是添加 #pragma once,但不能保证每个编译器都支持。

例如whatever.c

#include "whatever.h"

int f(int a)  return a + 1; 

然后您可以将“whatever.h”包含到任何其他.c 文件中,并将其与whatever.c 的目标文件链接。

像这样:

样本.c

#include "whatever.h"

int main(int argc, char **argv)

    printf("%d\n", f(2)); /* prints 3 */
    return 0;

编译它(如果你使用 GCC):

$ gcc -c whatever.c -o whatever.o
$ gcc -c sample.c -o sample.o

链接文件以创建可执行文件:

$ gcc sample.o whatever.o -o sample

您可以测试样品:

$ ./sample
3
$

【讨论】:

你可能想提到头部保护 @luke:非常感谢。不知道什么是头后卫。现在要去google一下。再次感谢。 @luke 他们被正式称为包括警卫,但你的术语很常见。还有#pragma once,它是非标准的,但得到了广泛的支持,而且(在我看来)更简单 这很好,但我不能说头文件中的函数是做什么的吗?还有其他形式的模块化编程吗? @PabloSantaCruz 那么编译器会在哪里搜索.h 文件中声明的原型的函数定义?因为我们没有给出任何定义函数的线索。【参考方案2】:

头文件可以包含任何有效的 C 代码,因为它们在编译之前由预处理器注入到编译单元中。

如果头文件包含一个函数,并且被多个.c 文件包含,则每个.c 文件将获得该函数的副本并为其创建一个符号。链接器会抱怨重复的符号。

技术上可以在头文件中创建static 函数以包含在多个.c 文件中。虽然这通常不会这样做,因为它违反了在 .c 文件中找到代码和在 .h 文件中找到声明的约定。

更多解释请参见C/C++: Static function in header file, what does it mean? 中的讨论。

【讨论】:

以上是关于如何创建 C 头文件 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C++中关于如何使用自己编写的头文件问题!有代码

评论 C 代码、头文件和源文件 [关闭]

从cpp文件创建头文件.h [关闭]

C语言怎么把自定义头文件添加到函数库中

在 C 程序中,如果我从 /usr/include 的头文件中调用函数,究竟会发生啥? [关闭]

如何让linux-gcc找到自定义的头文件