提取包含在 C 文件中的内容

提取包含在 C 文件中的内容

我需要将所有包含的库提取到 C 文件中,但遇到了一些问题。我的解决方案是这样的:

grep -oP '#(?:\/\*\w*\*\/|)include(?:\/\*\w*\*\/|\s*)"\w*.h"|<\w*.h>' main.c

例如,此正则表达式在注释中时采用库

/*#include <stdlib.h>*/

我不知道如何使该脚本只提供库名称而不包含 #include

如何修复我的正则表达式使其正常工作?

更新:

主程序

#include  "string.h"
#include <stdlib.h>
 #include "math.h"
    #include "stdint.h"
#/*comment*/include /*comment*/ <fenv.h>  
//#include <iostream>
#/**/include "something.h"
/* comment */#include "float.h"
/*#include "library.h"*/
int main() {

}

我想要的是:

"string.h"
<stdlib.h>
"math.h"
"stdint.h"
<fenv.h>
"something.h"
"float.h"

答案1

您应该要求编译器(或者更确切地说,C 预处理器)为您完成这项工作:

gcc -M main.c

这将产生一个 Makefile 样式的依赖关系,其中包含所有包含的头文件main.c(包括传递性包含的头文件)。它将正确处理注释和其他预处理器指令(#if#ifdef)。

相关内容