A example of a complicated situation would be the following
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