对于c/cpp代码,我希望将所有新添加的更改添加到一个宏中,并删除Else部分中的更改.

例如,以下补丁程序

diff --git a/test.c b/test.c
index a35d23a..5ee498a 100644
--- a/test.c
+++ b/test.c
@@ -1,6 +1,6 @@
 #include <stdio.h>

 int main() {
-    printf("Old line");
+    printf("New line");
     return 0;
 }

修改为

diff --git a/test.c b/test.c
index a35d23a..668d2e0 100644
--- a/test.c
+++ b/test.c
@@ -1,6 +1,10 @@
 #include <stdio.h>

 int main() {
+#ifdef MODIFIED
+    printf("New line");
+#else
     printf("Old line");
+#endif
     return 0;
 }

diff --git a/test.c b/test.c
index a35d23a..d05f7d1 100644
--- a/test.c
+++ b/test.c
@@ -1,6 +1,11 @@
 #include <stdio.h>

 int main() {
+#ifdef MODIFIED
+    printf("New line");
+#endif
+#ifndef MODIFIED
     printf("Old line");
+#endif
     return 0;
 }

我试着搜索是否有什么内置的工具可以做到这一点.不幸的是,找不到一个.

有人能帮帮忙吗. 提亚

推荐答案

这内置于diff中,至少在Linux和MacOS上(它不在diff的POSIX规范中).从https://linux.die.net/man/1/diff人起:

-D NAME,--ifdef=NAME.

输出合并文件以显示"#ifdef name"差异.

对于没有此功能的POSIX diff,diff -U 99999999 FileA FileB将生成合理文件的全部内容,然后一个简单的脚本可以插入#if defined !Name,其中-从第一列开始;#else,其中-变为+#if defined Name,其中+开始时没有前面的-;以及#endif,其中+-结束,并删除每一行的标题和前导字符(用于未更改的行的空格).这使得线组与您显示的内容相反,因此它首先有旧的线,然后是新线.如果这是不能接受的,您可以在diff命令行上交换文件的顺序,并更改-+的含义.

C++相关问答推荐

双指针指向常量双指针的指针类型赋值不兼容

试图从CSV文件中获取双精度值,但在C++中始终为空

在C++中访问双指针

为什么我的Hello World EFI程序构建不正确?

I2C外设在单次交易后出现故障

<;unistd.h>;和<;sys/unistd.h>;之间有什么区别?

如何将另一个数组添加到集合中,特别是字符串?

S和查尔有什么不同[1]?

链接器脚本和C程序使用相同的头文件,这可能吗?

不带Malloc的链表

*S=0;正在优化中.可能是GCC 13号虫?或者是一些不明确的行为?

向左移位3如何得到以字节为单位的位数?

意外的C并集结果

可以';t从A9G模块拨打电话

如何打印循环调度问题的时间表

在NASM中链接Linux共享库时出错-';将R_ X86_64_;foo';

#define X Defined(Y) 是有效的 C/C++ 宏定义吗?

C23 中是否有 __attribute__((nonnull)) 的等效项?

如何确定 C 程序中的可用堆内存

int 与 size_t 与 long