수 int (*)[]
불완전한 유형을 수?
C 2018 6.2.5 1의 말 :
변환 단위 내의 다양한 지점에서, 객체 유형이 불완전 하거나 ( 해당 유형의 객체 크기를 결정 하기에 충분한 정보가 없음) 완료 (충분한 정보가 있음) 될 수 있습니다.
따라서 유형의 크기를 알면 유형이 완전한 것 같습니다. 6.2.6.1 28은 특정 유형의 포인터가 동일한 크기 (포인터 void
및 문자, 호환 가능한 유형, 구조체 및 공용체 에 대한 포인터)를 가져야 하지만 다른 유형에 대한 포인터는 다를 수 있음을 지정합니다.
모든 포인터 또는의 배열에 대한 모든 포인터가 int
동일한 크기를 갖는 C 구현에서는 크기 int (*)[]
가 알려져 있으므로 완료됩니다. 예를 들어, 큰 배열에 다른 포인터를 사용하는 구현에서는 크기를 알 수 없으므로 불완전합니다.
으로 MM 지적 , 구조는 6.7.2.1이 포인터의 한 크기의 구현을 수용해야합니다 제안 3에 제약 당, 최종 유연한 배열 구성원을 제외시켰다 불완전한 유형의 구성원을 포함 할 수 없습니다 struct { int (*p)[]; }
구현이 다른이 그 동안 이러한 배열의 크기는 제약 조건 위반을 진단해야합니다. (이것은 그러한 선언이 C를 엄격히 준수하는 것이 아님을 의미합니다.)
void *
완료 되었다는 사실 은 불완전한 유형에 대한 포인터가 완료 될 수 있음을 나타냅니다. 불완전한 유형에 대한 포인터가 불완전 할 수 있는지 여부는 표시하지 않습니다. “포유 동물이 코끼리가 될 수 있는가?”라고 물으면“사자가 포유 동물이다”는 것이 포유 동물이 코끼리가 될 수 없다는 것을 의미하지는 않습니다. 이 질문은 불완전한 유형에 대한 포인터의 X 세트가 불완전한 요소를 포함하고 있는지 묻습니다. 불완전한 유형에 대한 포인터의 X 세트가 완료된 요소를 포함하고 있음을 보여주는 것은 관련이 없습니다.