gpt4 book ai didi

c - 使用 unifdef 默认省略未定义的预处理器分支的方法?

转载 作者:太空狗 更新时间:2023-10-29 15:16:30 25 4
gpt4 key购买 nike

我正在使用复杂的 C 代码,其中包含许多编译选项。这个使代码很难阅读。我想制作一份反射(reflect)代码的副本它实际编译的方式。使用“unifdef”我得到了很好的结果实用程序,直到最近我才知道。但是,我很困惑为什么这么难调用,想知道我是否遗漏了什么。

考虑这个例子:

#ifdef A
printf("A\n");
#endif
#ifdef B
printf("B\n");
#endif

如果您使用“unifdef -DA junk.c”调用 unifdef,您将获得:

  printf("A\n");
#ifdef B
printf("B\n");
#endif

因为你没有告诉unifdef B是未定义的,所以它没有取出来。

我希望该实用程序的行为使得当我说 unifdef -DA 时,我得到的是:

  printf("A\n");

这对应于 C 预处理器实际执行的操作:任何未定义的分支都将被省略。

要使用 unifdef 获得这种行为,我似乎需要使用“unifdef -DA -UB junk.c”,明确告诉它 B 未定义。尽管我可能错过了一种更简单的调用方法。

我写了一个 python 脚本来生成一长串所需的 -D 和 -U我正在使用的代码的 Makefile 中的标志(通常每个例程 80 个)。结果非常好。但我想知道这样的脚本是否实际上是必要的。

也有可能另一个实用程序(sunifdef?coan?)有我想要的行为已经内置;如果是,请提及。

最佳答案

coan实用程序使用 -m 标志执行您需要的操作:

$ coan source -DA -m test.c 
printf("A\n");

来自手册页:

-m, --implicit
Assume that any symbol that is not --define-ed is implicitly
--undef-ed.

关于c - 使用 unifdef 默认省略未定义的预处理器分支的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14491555/

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