1

我在 Cypress PSoC IDE (C99 ARM_GCC) 中编码。*.c当我在两个模块(例如)中使用同名函数时,void MyClear()我收到错误:

构建错误:“清除”的多个定义

MyClear()在任何标题中都没有提到,我认为它是.C文件私有的,但我显然错了。

4

5 回答 5

4

第 1 点:

C中,函数默认是全局的

没有privatein 的概念Cstatic但是,FWIW将函数的范围限制为仅翻译单元。请参阅this previous question和答案以获得一些澄清。

第 2 点

您在链接状态下收到此错误。当所有翻译单元都已编译并即将链接在一起时,链接器可以看到多个函数定义并因此引发错误。

注意事项:您不在头文件中定义函数。您声明它们,只要声明不冲突,即使在单个翻译单元内也可以有任意数量的声明。

于 2015-04-17T08:41:45.467 回答
4

如果使用static.

于 2015-04-17T08:43:15.723 回答
2

函数在 C 中不能是私有的。尝试用静态定义它

于 2015-04-17T08:44:50.277 回答
0

您正在链接这两个文件以创建一个可执行二进制文件,不是吗?因此不能有重复的函数定义。

编译器会将函数名称(符号)解析为可执行二进制文件中的唯一地址。如果它看到两个定义,它在运行期间调用函数时会选择哪一个,执行可以跳转到一个需要预先确定的位置。因此,编译器对多个定义不满意。

于 2015-04-17T08:41:09.103 回答
0

要克服,您可以使用 static 该功能。

这是c中静态内容的最佳答案。

于 2015-09-29T09:25:55.513 回答