我有两个名为 uart.h 和 spi.h 的库
两者的功能名称相同,但实现不同。
例如,在 uart.h 中,我们有
void SetValue()
具有 uart 实现的函数,而在 spi.h 中,我们有相同的函数名称,但具有 spi 实现。
我想将这两个库合并到一个带有预处理器指令的库(
#ifdef
#define
...)雇主希望我使用这种方式进行合并。
我们想要求 main.c 文件中的用户确定协议(uart 或 spi),并根据 main.c 文件中的用户定义编写库。
如果您有使用通用名称定义函数的 C++ 头文件,那么它们最好使用命名空间。然后你就会
UART::SetValue()
并且没有问题。
接下来的事情是:为什么 UART 不是一个有方法的类? UART 是一个对象,它在内存中拥有一个位置(在大多数架构中),并且系统中可以有多个 UART。 UART 的
SetValue()
需要额外的参数吗?
一旦将两个函数分开,您就可以合并它们并使用 #ifdef 构造选择这两个函数之一作为默认值。