1

最终,我试图从数千个现有的 c 和 c++ 头文件中提取相关结构。我已经能够使用 libtooling 从各种不同的标头中提取一个结构以及它所依赖的所有结构/枚举/类型定义等。不幸的是,当我得到支持 Decls 的源时,它仍然引用其中定义的宏。我目前正在尝试找到一种方法来访问和打印这些宏的源,但在定义多个宏时运气不佳。

例如:

#define INT int
#define UNSIGNED unsigned
#define NAME name

typedef struct {
   UNSIGNED long INT NAME;
} test;

当我获得与名称对应的 FieldDecl 并获得 SourceRange 时,我看到拼写位置指向“#define UNSIGNED unsigned”。我想知道如何到达其他宏定义的源位置。我知道当我更改“UNSIGNED long INT NAME;”时 到“无符号长整数名称;” 然后拼写位置将指向“#define INT int”。似乎名称的处理方式与更改为“unsigned long int NAME;”不同。让我没有拼写位置。

有没有办法在给定 SourceRange 的情况下获得多个拼写位置?我是否需要以其他方式缩小源范围?我已经尝试对下一个标记进行词法分析,但它并没有给我留下一个新的拼写位置。我还必须考虑数组中的宏,例如“int bob[MAX_WIDTH][MAX_HEIGHT]”,但我希望一旦我在这里弄清楚我的问题就会变得清晰。提前感谢您提供的任何帮助。

4

0 回答 0