为什么libclang的clang_getEnumDeclIntegerType在Linux和Windows上返回不同的结果?

时间:2018-06-11 14:35:12

标签: c libclang

考虑这个简单的C文件,file.c

enum X {
    A,
    B
}

让我们使用libclang来检测枚举的基础类型:

#include <stdio.h>
#include <clang-c/Index.h>

enum CXChildVisitResult visitor(CXCursor cursor, CXCursor parent, CXClientData client_data)
{
    if (clang_getCursorKind(cursor) == CXCursor_EnumDecl) {
            enum CXTypeKind kind = clang_getEnumDeclIntegerType(cursor).kind;
            printf("Type: %s\n", clang_getCString(clang_getTypeKindSpelling(kind)));
    }

    return CXChildVisit_Recurse;
}

int main()
{
    CXIndex index = clang_createIndex(0, 0);
    CXTranslationUnit unit = clang_parseTranslationUnit(index, "file.c", NULL, 0, NULL, 0, CXTranslationUnit_None);
    CXCursor cursor = clang_getTranslationUnitCursor(unit);
    clang_visitChildren(cursor, visitor, NULL);
}

这将在Windows上打印Int(Win10,VS 2015工具包,预编译的clang 6.0)和Linux上的Uint(适用于Windows的Linux子系统上的Ubuntu Xenial,clang 6.0软件包)。

为什么?有没有办法让输出在不同的平台上相同?

0 个答案:

没有答案