Я использую последний LibClang для анализа некоторых файлов заголовков C. Процесс кода I происходит из CXUnsavedFile (все это генерируется динамически и ничего не живет на диске). Например:LibClang: проанализировать файл заголовка с определениями из другого файла заголовка?
FileA.h содержит:
struct STRUCT_A {
int a;
struct STRUCT_B foo;
};
FileB.h содержит:
struct STRUCT_B {
int b;
};
При анализе fileA.h со следующим фрагментом кода:
CXUnsavedFile unsaved_files[2];
unsaved_files[0].Filename = "fileA.h";
unsaved_files[0].Contents = fileA_contents;
unsaved_files[0].Length = strlen(fileA_contents);
unsaved_files[1].Filename = "fileB.h";
unsaved_files[1].Contents = fileB_contents;
unsaved_files[1].Length = strlen(fileB_contents);
tu = clang_parseTranslationUnit(
index,
"fileA.h",
argv, // "-x c-header -target i386-pc-win32"
argc,
(CXUnsavedFile *)&unsaved_files,
2,
CXTranslationUnit_None
);
CXCursor cur = clang_getTranslationUnitCursor(tu);
clang_visitChildren(cur, visitor, NULL);
I получите ошибку «field has incomplete type 'struct STRUCT_B'
», которая имеет смысл, поскольку я не включил файлB.h, чтобы определить struct STR UCT_B.
Добавление "#include <fileB.h>" не работает (fatal error: 'fileB.h' file not found
).
Как получить парсинг fileA.h для работы, когда одно или несколько необходимых определений присутствуют в другом файле CXUnsavedFileB.h?
Ну, если 'fileA.h' зависит от' fileB.h', почему бы просто не переключить порядок файлов? –