C标准是否对"未知大小的数组"术语提供明确定义?
C标准是否对"未知大小的数组"术语提供明确定义?
咱们直接切入正题:虽然「未知大小的数组」字面意思很好理解——就是那种没有明确给出大小的数组,但从C标准的文本表述来看,它并没有给这个术语一个直接、明确的定义。
我特意梳理了C11标准里的相关内容,搜索「unknown size」和关联的「incomplete type」(不完全类型)关键词后,找到了两段核心描述:
如果未指定大小,则数组类型为不完全类型。
未知大小的数组类型是不完全类型。
你看,这两段话的逻辑是:前者是「如果A(数组未指定大小),则B(属于不完全类型)」,后者是「C(未知大小的数组)属于B(不完全类型)」。但从这两个表述里,咱们没法直接推导得出「如果A则C」——也就是说标准并没有把「未指定大小的数组」和「未知大小的数组」直接划等号,相当于没有给「未知大小的数组」下一个清晰的定义。
另外还要注意一个术语混淆的点:别把「未知大小的数组」和「未指定大小的变长数组类型」搞混,「未指定大小」这个说法是专门留给VLA(变长数组)的。不过C11里有个小疏漏,它把extern int y[];这种声明描述成「未指定大小的int数组」,这个问题在C2X里已经修正了,改成了「未知大小的int数组」。
备注:内容来源于stack exchange,提问作者pmor
相关产品推荐
相关产品推荐

