我正在使用包含许多编译选项的复杂 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 脚本来从我正在使用的代码的 Makefile 中生成一长串所需的 -D 和 -U 标志(通常每个例程 80 个)。结果非常好。但我想知道这样的脚本是否真的有必要。
另一个实用程序(sunifdef?coan?)也可能已经内置了我想要的行为;如果有,请提及。