【发布时间】:2021-05-01 18:59:31
【问题描述】:
我想包含两个我从源代码构建的库。
更详细地说:这些库大体上是相同的,除了一些不同的参数并由 a 设置
#define Mode *X*
X 描述了模式并描述了要使用的参数集。例如
对于 x = 2 我想使用
#define N 3
#define Q 4
等
在一个库中,我的 x 是例如 2,而在另一个 3 中,例如 N 4 和 Q 6。
此外,这些库包含相同的函数,它们根据设置的模式运行略有不同。
我需要同时包含它们并保持选项打开以使用这两个参数集。
任何想法如何正确和干净地实现这一点?整个事情只取决于模式,不幸的是,重命名所有包含的函数和变量是没有选择的。但是我可以访问源代码并且可以进行一些更改。
我尝试构建库并将它们包含在我的主程序中,但显然我有很多命名冲突,并且链接器找到的第一个定义设置为正确。
另一个问题是所有头文件都以e.g.开头
#ifndef CONFIG
#define CONFIG
这是标准的,可以,但我有两次所有文件,所以只有链接器包含的第一个标头看到它尚未定义,第二个标头已定义,因此编译器不执行以下代码.
有人知道如何解决这个优雅的问题吗?
我听说过一些关于命名空间的事情,但我不确定这是否适用于 C 以及正确的方法。
BR
【问题讨论】:
-
关于包含头文件的问题,您可以将
CONFIG的名称更改为每个头文件更具描述性的名称。例如,如果头文件位于不同的目录中,您可以将目录名称添加到常量名称 -
为什么不能用
#if MODE==2 #define N 3 ...之类的? -
我这样做了,但是如果我构建库并链接它们,您仍然会有冲突的类型,因为名称仍然相同