gpt4 book ai didi

c - 如何摆脱大型 C 项目中的 ifdef

转载 作者:太空狗 更新时间:2023-10-29 14:57:56 25 4
gpt4 key购买 nike

我得到了一个用 C 编码的开源项目。它使用#ifdef 进行交叉编译。源代码中有很多 ifdef。我只想为一个平台修改它。我想通过编译器的预处理器 (Visual C++) 运行它,但它会将预处理结果写入单个文件,我不需要。任何人都知道一种预处理项目的方法,使其结构完好无损(所有文件都完好无损)?请不要 grep。

编辑:

我找到了一个潜在的解决方案(这些天你能在互联网上找到的东西真是太神奇了)。它是 boost.wave - 一个 C++ 预处理器库,可以做一些有趣的事情。我不知道结果如何,但我会试一试。不过,这不是最终答案,所以如果您有解决方案,我将很高兴听到。

最佳答案

我知道有两种工具可以用来半自动地执行此操作。

一个是sunifdef (unifdef 的儿子)。 AFAIK,虽然它不再被维护(它所基于的 unifdef 也不是)。

另一个是coan ,正在积极维护,是 sunifdef 的发展。

另请参阅:Is there a C pre-processor which eliminates #ifdef blocks based on values defined/undefined? .

碰巧的是,我仍在工作的主要项目上使用 sunifdef 从代码库中删除过时的代码(例如,自 1996 年以来不再支持的机器)。我唯一遇到的问题是,如果一行包含这样的括号:

#if (defined(MACH_A) && defined(PROP_P)) || (defined(MACH_B) && defined(PROP_Q)) || \
(defined(MACH_C) && defined(PROP_R))

并且我们有-UMACH_C(所以不再支持机器C),输出行是:

#if defined(MACH_A) && defined(PROP_P) || defined(MACH_B) && defined(PROP_Q)

从技术上讲,这很好;它是正确的。最好在表达式中保留额外的、技术上多余的括号。

一个警告:虽然我可以回答这些在基于 Unix 的系统上编译的问题,但我没有亲自在 Windows 上检查过它们。

关于c - 如何摆脱大型 C 项目中的 ifdef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8679350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com