有没有办法用 c 预处理器进行条件包含?
我有一个由不同团队共享的工具“库”(Tools.c、Tools.h)。该库依赖于第二个库,提供 XML 功能。让我们称之为 XML.h 现在一个团队使用第二个库 (XML.h) 的普通版本,而另一个团队在他们的项目中使用扩展版本 (XMLEx.h)。第二个团队不想包含 XML.h,因为他们已经包含了 XMLEx.h,提供了 XML.h 的所有功能。
是否有一种机制来实现类似的东西:
#ifdef XML_EX
#include "XMLEx.h"
#else
#include "XML.h"
#endif
只有#define XML_EX
在更高的(项目)级别上?喜欢
#include "Tools.h"
对于团队 1 和
#define XML_EX
#include "Tools.h"
为第 2 队?(我知道简单的解决方案是行不通的,更多的是为了说明所需的“工作流程”。)
边界条件为:
- 视窗系统
- CVI/LawWindows IDE
- 没有制作文件
- Tools.h 应该在没有外部项目的情况下编译。
编辑:对于建议的解决方案和提示,这是常见的方式,也许它与我的构建过程有关,但它不起作用。IDE 抱怨缺少第 2 组的 XML.h。我猜,这是因为 IDE 尝试先独立编译每个源,而不知道“外部”#define。
编辑:让我们假设,A 队是一群白痴,怎么只能在 IDE 中点击“RUN”按钮。因此,它最好开箱即用。
编辑:好的,这让我很困惑。我所学到的一切都告诉我,它应该工作。这是一个最小的集合,我已经测试过:
主程序
#define XML_EX
#include "Tools.h"
void main(void)
{
test();
}
然后是工具.h
#ifdef XML_EX
#include "XMLEx.h"
#else
#include "XML.h"
#endif
XMLEx.h 具有测试功能,而 XMLEx.c 实现了它。如果我尝试构建,我会得到一个“XML.h not found”。#define XML_EX
使用Tools.h 中的a 一切正常。