Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在忽略#ifdef中的代码的情况下比较两个文件?_C_Version Control_Diff_Conditional Compilation - Fatal编程技术网

C 如何在忽略#ifdef中的代码的情况下比较两个文件?

C 如何在忽略#ifdef中的代码的情况下比较两个文件?,c,version-control,diff,conditional-compilation,C,Version Control,Diff,Conditional Compilation,假设我们有一个原始源文件,其中包含#ifdef条件中的代码块,以及另一个手动“预处理”的文件,因此一些代码块已包含,而另一些代码块已删除。我怎样才能只看到不是来自#ifdef的修改 例如,原始文件可以是: #ifdef X blabla1 #else blabla2 #endif 修改后的文件是: blabla2 new line 我只想检测是否添加了新行 有没有一个工具或一个简单的方法来做到这一点?如果我事先知道是否定义了X,我可以用unifdef去除不相关的代码,但在这种情况下我

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

例如,原始文件可以是:

#ifdef X
  blabla1
#else
  blabla2
#endif
修改后的文件是:

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

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


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

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

clangformat
也应该为您消除空行


您也可以尝试使用
unifdef
而不是
gcc-E
,您可以在手册页中查找所需的选项。

您可以预处理文件,然后比较预处理的输出。请注意,手动预处理、修改的文件必须具有某些定义,否则它将无法实现其生成的C文件。@PaulOgilvie正确,我只是不知道它们。有关可以自动执行“手动预处理”的工具(Ifdef的儿子,Coan),请参阅。