我尝试在Mac上使用pygccxml解析不同的C标头。
例如,如果我使用以下标头:
#ifndef TEST_STRUCT_H
#define TEST_STRUCT_H
#include <stdint.h> /* for size_t */
struct TestStruct
{
long a;
short b;
char c[32];
} a;
#endif // TEST_STRUCT_H
并使用pygccxml对其进行解析,如下所示:(从单元测试中提取):
test_struct_file = "TestStruct.h"
generator_path, generator_name = utils.find_xml_generator()
xml_generator_config = \
parser.xml_generator_configuration_t(
xml_generator_path=generator_path,
xml_generator=generator_name)
decls = parser.parse([test_struct_file], xml_generator_config)
global_ns = declarations.get_global_namespace(decls[0])
expected_varnames = ["a", "b", "c"]
expected_vartypes = ["long int", "short int", "char [32]"]
for d in global_ns.declarations:
if declarations.is_struct(d):
for var, name, ctype in zip(d.variables(),
expected_varnames,
expected_vartypes):
variable_name = var.name
variable_type = var.decl_type.decl_string.strip("::")
assert name == variable_name
assert ctype == variable_type
一切都很好。
但是,如果我包括
#include <stdint.h> /* for size_t */
在头文件中,测试失败并
> assert name == variable_name
E AssertionError: assert 'a' == '__routine'
E - a
E + __routine
因为返回的内容充满了不同的东西,但是找不到TestStruct
。
我不明白这里发生了什么。我该如何解决?
我为此测试使用了Python 3.6.5和pygccxml 1.9.1。 如果我在Ubuntu 16.04系统上执行相同操作,则可以正常工作 (我在那里使用了其他版本的Python和pygccxml)。