我很难找出为什么我不能在几个 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 可执行 main.c thread1.c thread2.c
错误:“锁”的多重定义
所以我现在的问题是:
我怎样才能完成我想要的?
我不认为这是不可能的。否则,在所有许多 C 库中可用的所有 C 源代码都需要是唯一的。 (不,没有意义,或者会吗?)
所以我在大约 3 小时前对自己想,一定有一个解决方案。我一定在这里遗漏了一些东西。
好吧,我尝试使用谷歌搜索它......但不知何故,这次我的谷歌技能并没有帮助我。
真的没有办法做到这一点吗?或者我只是愚蠢地寻找它?
提前致谢,
睡
最佳答案
您需要该函数 lock()
为 static
。
static void lock() {..}
原因是带有
static
的函数在“翻译单元”之外是不可见的。换句话说(可能是错误的),静态函数对于 *.c 文件是私有(private)的。因此,它们不会像您目前所遇到的那样在链接阶段导致链接错误。关于c - 在多个c源文件中具有相同的功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20353267/