Полный тип к неполному типу в стандарте 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
Другие вопросы по тегам