如何合并两个 C 头文件,以便删除重新#defines?

如何合并两个 C 头文件,以便删除重新#defines?

假设我有:

sdk.h:

#define foo 1
#define bar 1

应用程序.h:

#define foo 0

鉴于我希望 app.h 重新定义 sdk.h 中已定义的任何内容,如何生成如下所示的 merged.h:

#define foo 0
#define bar 1

一种方法可能是“不要这样做,让预处理器为您做”。我已经尝试过了,但我认为这对我的情况不起作用。我真的在寻找一种使用基本 shell 脚本的方法。

答案1

如果头文件中内容的顺序不重要,您可以执行以下操作:

$ awk '/#define/{a[$2]=$3; next}1;END{for(i in a){print "#define",i,a[i]}}' sdk.h app.h 
#define foo 0
#define bar 1

请注意,任何不包含的行将#define首先打印。

相关内容