Почему libclang clang_getEnumDeclIntegerType возвращает разные результаты в Linux и Windows?

Рассмотрим этот простой 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);
}

Это печатает Int в Windows (инструментарий Win10, VS 2015, предварительно скомпилированный clang 6.0) и Uint в Linux (Ubuntu Xenial в подсистеме Linux для Windows, пакеты clang 6.0).

Это почему? Есть ли способ сделать вывод одинаковым на разных платформах?

0 ответов

Другие вопросы по тегам