是否存在翻译单元中的完整类型可能成为不完整类型的情况? C11 standard(第6.2.5节)脚注中的以下陈述提出了这个问题。
在整个翻译单元中,类型可能不完整或完整,或者它可能会在翻译单元内的不同位置更改状态。
对于不完整类型在翻译单元中成为完整类型的示例比比皆是。但我想知道是否有可能出现相反的情况。我的直觉会告诉我它不是。
答案 0 :(得分:1)
复杂情况的一个例子如下
extern double A[];
double* f(void) {
extern double A[5];
enum { a = sizeof(A), }; //< A has complete type
return A;
}
enum { b = sizeof(A), }; //< A has incomplete type: error
double A[5];
enum { c = sizeof(A), }; //< A has complete type