考虑这个简单的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软件包)。
为什么?有没有办法让输出在不同的平台上相同?