我希望能够在头文件中创建一个函数集合,我可以在其中一个C程序中使用#include。
答案 0 :(得分:135)
DONE。
示例whatever.h
#ifndef WHATEVER_H_INCLUDED
#define WHATEVER_H_INCLUDED
int f(int a);
#endif
注意:感谢luke添加了警卫(预处理器命令)。它们避免在同一编译中两次包含相同的头文件。另一种可能性(在评论中也提到)是添加#pragma once
但不保证每个编译器都支持它。
示例whatever.c
#include "whatever.h"
int f(int a) { return a + 1; }
然后你可以将“whatever.h”包含到任何其他.c文件中,并将它与whatever.c的目标文件链接。
像这样:
sample.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
$
答案 1 :(得分:3)
头文件可以包含任何有效的C代码,因为它们在编译之前由预处理器注入编译单元。
如果头文件包含一个函数,并且被多个.c
文件包含,则每个.c
文件将获得该函数的副本并为其创建符号。链接器会抱怨重复的符号。
技术上可以在头文件中创建static
个函数,以包含在多个.c
文件中。虽然这通常没有完成,因为它违反了.c
文件中找到代码并且在.h
文件中找到声明的约定。
有关详细说明,请参阅C/C++: Static function in header file, what does it mean?中的讨论。