我很难找出为什么在几个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 -odecutable main.c thread1.c thread2.c

错误:“锁”的多重定义

所以我现在的问题是:我该如何完成我想要的?

我认为这是不可能的。否则,所有C源中可用的所有C源代码都需要唯一。 (不会没有任何意义,还是会吗?)

因此,我大约3H前对自己说,必须有一个解决方案。我必须在这里缺少一些东西。

好吧,我尝试谷歌搜索...但是这次我的Google技能以某种方式对我没有帮助。真的没有办法这样做吗?还是我只是愚蠢地寻找它?

提前致谢,

Leep

有帮助吗?

解决方案

您需要该功能 lock() 成为 static.

static void lock() {..}

原因是与 static 在“翻译单元”之外看不到。在其他(可能是错误的单词)中,静态函数是 私人的 到 *.c文件。因此,它们不会像您当前那样引起链接阶段中的链接错误。

其他提示

您必须将锁定为 static void lock(){}.

否则,该函数名称在整个程序中都可以看到,并且您将获得名称碰撞(尽管如果没有功能原型,您仍然无法调用它)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top