如何创建 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 头文件 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章