Полный тип к неполному типу в стандарте C: C11
Есть ли ситуация, когда полный тип в единице перевода может стать неполным? Следующее утверждение в сноске стандарта C11 (раздел 6.2.5) вызвало этот вопрос.
Тип может быть неполным или полным во всей единице перевода или может изменять состояния в разных точках в единице перевода.
Существует множество примеров, когда неполные типы становятся полными типами в единице перевода. Но мне было интересно, возможен ли когда-либо противоположный сценарий. Моя интуиция сказала бы мне, что это не так.
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