我目前正在使用 Clang 的 ASTMatcher 来提取命名结构声明并排除没有标签的结构。这是我想避免匹配的结构类型的示例:
#include <stdlib.h>
struct {
int b;
} a;
int func() {
a.b = 1;
return 0;
}
对于我的匹配器,我使用:
auto structDeclMatcher = recordDecl(
isExpansionInMainFile(),
isDefinition()
).bind("structDecl");
我还尝试使用 isAnonymousStructOrUnion() 和 except(hasName("")) 来排除这些结构,但这两种方法都不起作用。没有标签的结构似乎仍然匹配。
如何修改我的 ASTMatcher 以有效排除这些结构并仅匹配命名结构?我应该使用任何特定的匹配器或条件来区分命名结构和没有标签的结构吗?
这不是答案,只是澄清:
这个结构是一个tagless结构。
struct {
int b;
} a;
在此示例中,内部结构是匿名的。
struct \\ <- tagless structure
{
struct // <- anonymous structure
{
int b;
};
} a;