Почему 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).
Это почему? Есть ли способ сделать вывод одинаковым на разных платформах?