我在寻找为什么我不能在多个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
假设我有以下文件:
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
static
意味着它对于任何其他的 *.c 文件都不可见。但是在thread1.c
中仍然可见,您可以调用它。因此它不会引起任何问题。 - UltraInstinct