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

2024-03-27

我正在使用复杂的 C 代码,其中包含许多编译选项。这 使得代码很难阅读。我想生成一份反映代码的副本 它实际编译的方式。我使用“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?)也可能具有我想要的行为 已经内置;如果有,请提及。


The coan http://coan2.sourceforge.net/实用程序可以满足您的需要-m flag:

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

从手册页:

-m, --implicit
    Assume that any symbol that is not --define-ed is implicitly
    --undef-ed.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

默认情况下使用 unifdef 省略未定义的预处理器分支的方法? 的相关文章

随机推荐