c - 为什么两个 .C 文件中的同名私有(private)函数会导致多重定义错误?

标签 c c99 psoc

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

Build error: multiple definition of `Clear'

MyClear() 没有在任何 header 中提及,我推测它是 .C 文件私有(private)的,但我显然错了。

最佳答案

第 1 点:

C 中,函数默认情况下是全局的。

C中没有private的概念。 FWIW,有 static,但是,limits 函数的范围仅限于翻译单元。参见 this previous question and the answers一些澄清。

第 2 点

您在链接状态中遇到此错误。当所有翻译单元都已编译并即将链接在一起时,链接器可以看到函数的多个定义,因此会抛出错误。

请注意:您不要在头文件中定义 函数。您声明它们,只要声明不冲突,您甚至可以在单个翻译单元中拥有任意数量的声明。

关于c - 为什么两个 .C 文件中的同名私有(private)函数会导致多重定义错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29694261/

相关文章:

c - 为什么二维数组用于堆栈?为什么不能将一维数组用于堆栈?

c++ - Libusb - ubuntu - Psoc5。 libusb_open_device_with_vid_pid 返回 0

c - 如何从c中的一行文本中删除某些单词

c - 将结构的实例分配给新的 const 结构实例

c - OpenMP 和 C99 数据

c - 为什么在 c99 或 c90 模式中支持 _Generic 关键字?

c - PSoC 1 中不同引脚的 GPIO 中断

microcontroller - 使用JTAG接口(interface)进行编程

c - 为什么 scanf 不能与正则表达式和动态分配一起使用

c - 如何在 C 中将基于文本的数据文件读入数组?