First note that this sentence applies only for identifiers of variably modified type, that is a type that has a dynamic array dimension somewhere in its description. For n
a variable something like
double a[n];
unsigned (*B)[n][n];
The objects that are associated to this kind of identifier have a special rule for their life time, it only starts at the point of declaration, whereas for other types it starts at entering the scope.
The paragraph that you are citing is to ensure that all the case
of the switch
statement has the same property according to that life time on such an object. Either the life of the object has already started, before any of the cases, or it only starts after any of the case
(or default
) labels.
So in essence it just indicates that you shouldn't mix usage of VLA (or similar) and jump statements, because you can't know what the size is to be and where the memory for the array (if any) has to be allocated.