我很难找到为什么我不能在几个C源文件中使用相同的功能。 我一直以为我不能访问另一个源文件中的函数,只要它们没有在头文件中声明。
让我们假设我有以下内容:
main.c - >包括thread1.h& thread2.h
thread1.h - >声明例如void * thread1();
thread1.c - >定义void * thread1(){}并定义void lock(){}
thread2.h - >声明例如void * thread2();
thread2.c - >定义void * thread2(){}并定义void lock(){}
现在gcc告诉我,我不能这样做!
gcc -pthread -Wall -o executable main.c thread1.c thread2.c
错误:`lock'的多重定义
所以现在我的问题是: 我怎样才能完成我想要的东西?
我不认为这是不可能的。否则,所有许多C库中可用的所有C源代码都需要是唯一的。 (不会没有意义,或者会吗?)
所以我在3小时前想到自己必须有一个解决方案。我必须在这里遗漏一些东西。
好吧,我试过谷歌搜索...但不知何故,我的谷歌技能这次没有帮助我。 真的没办法做到这一点吗?或者我只是愚蠢地寻找它?
提前致谢,
LEEP
答案 0 :(得分:7)
您需要将该功能lock()
设为static
。
static void lock() {..}
原因是static
的功能在“翻译单元”之外是不可见的。在其他(可能是错误的)单词中,静态函数是私有到* .c文件。因此,它们不会像您当前那样在链接阶段导致链接错误。
答案 1 :(得分:0)
您必须将锁定声明为static void lock(){}
。
否则函数名称将在整个程序中可见,并且您将获得名称冲突(尽管如果没有函数原型,您仍然无法调用它)。