我对 gcc 4.3 有一个奇怪的问题,我想知道这是编译器的特定问题还是一般的 C 问题。诚然,我使用了一个非常奇怪的结构,但我喜欢它,因为它允许我执行一些原本不可能的规则。该项目分为几个模块,每个模块都有一个不透明的结构。标头中有一个typedef struct <tag> <type>
声明,在 1 c 文件中,有一个 astruct tag { ... };
和所有函数通过 a 引用一个元素<type> *
。
每个模块都知道自己的结构,其他模块的结构是不可见的。在一个模块中,我不使用 1 个元素,而是使用固定的元素数组。这意味着该模块的某些函数使用指向数组的指针。我们称之为模块wdi
。所以我有例如
void write_all(wdi_type (*wdis)[MAX_WDI]);
并用于分配(我知道非常不寻常的语法)直接返回指向数组的右指针。
wdi_type (*wdi_alloc(void))[MAX_WDI];
这在 GNU-C 3.4.6 (Solaris SPARC) 下运行良好,在 cc 下,它也编译了 sun 编译器 v12(但由于应用程序的另一部分中断,无法对其进行测试)。但是在 gcc 4.3.3(也在 4.4.6 x86-64 和 4.6.2 ARM 上测试过)上,它没有。我得到编译错误array type has incomplete element type
。我不明白为什么编译器在那个阶段需要这些信息。它也不需要其他不透明结构的大小。
它是一个 gcc 错误吗?
标准是怎么说的?
我找不到关于它的东西。我应该向 GNU 提交错误报告吗?