【发布时间】:2013-04-09 16:30:16
【问题描述】:
我对 gcc 4.3 有一个奇怪的问题,我想知道这是编译器的特定问题还是一般的 C 问题。
诚然,我使用了一个非常奇怪的结构,但我喜欢它,因为它允许我执行一些原本不可能的规则。
该项目分为几个模块,每个模块都有一个不透明的结构。
在标头中有一个typedef struct <tag> <type> 声明,在 1 c 文件中,有一个 struct tag { ... }; 并且所有函数都通过 <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 提交错误报告吗?
【问题讨论】: