如何比较#ifdef中忽略代码的两个文件?

时间:2018-04-20 12:37:04

标签: c version-control diff conditional-compilation

假设我们有原始源文件,其中包含#ifdef条件内的代码块和另一个手动“预处理”的文件,因此包含了一些代码块,其他代码块已被删除。我怎样才能看到不是来自#ifdef的修改?

例如,原始文件可能是:

#ifdef X
  blabla1
#else
  blabla2
#endif

,修改后的文件为:

blabla2
new line

我只想检测是否添加了new line

有没有工具或简短的方法来做到这一点?如果我事先知道X是否被定义,我可以用unifdef删除不相关的代码,但在这种情况下我不知道它,一旦有很多变量,尝试所有可能的组合是不可行的。

我认为一种方法是通过diff来识别差异,然后检查差异是否在ifdef中,但这似乎并不容易实现。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用扩展所有预处理器输入的gcc -E。因此,如果您想尝试扩展一些包含#ifdef X#ifdef Y的文件,您可以使用: gcc -E -DX -DY [filename] | clang-format

clang-format也应该为你排除空行。

您也可以尝试使用unifdef代替gcc -E,然后您可以在手册页中查找您需要的选项。