pmor Asked: 2024-11-12 23:02:20 +0800 CST2024-11-12 23:02:20 +0800 CST 2024-11-12 23:02:20 +0800 CST 0 大小数组的原理是什么? 772 GCC 和 Clang 都支持(作为扩展)0 大小(也称为“0 长度”)数组。 0 大小数组的原理是什么(示例int x[0])? arrays 2 个回答 Voted Best Answer John Bollinger 2024-11-12T23:56:37+08:002024-11-12T23:56:37+08:00 0 大小数组的原理是什么? 以你的意思是明确的零长度: int array[0]; GCC 手册将其描述为 用作结构的最后一个元素,该结构实际上是可变长度对象的标头 。正如手册继续指出的那样,这与 C99+ 灵活数组成员的用途相同,并且它建议为此使用 FAM 而不是零长度数组。该手册还与 C99 之前使用长度为 1 的数组实现相同目的的传统做法进行了对比,观察到两者对主机结构的大小有不同的影响。我认为这是扩展的最初灵感,并且我认为继续支持是为了向后兼容。 手册没有讨论在其他情况下使用零长度数组,但 GCC 确实接受这一点。没有给出理由,但我认为这是为了与允许结构成员使用它保持一致。C 语义在很大程度上可以与此类数组相一致,尽管它们不是很有用。 至于 Clang,我没有在Clang / LLVM 语言扩展中找到此扩展的文档。如果该系统支持它,那么我最好的猜测是,这是为了与 GCC 兼容,尽管这也可能是并行演进的情况。 David Hill 2024-11-12T23:12:49+08:002024-11-12T23:12:49+08:00 需要考虑两点:在现实世界中,空盒子与没有盒子是不同的。如果源语言允许空数组,那么在将代码从一种语言转移到另一种语言时也可能会有所帮助。
以你的意思是明确的零长度:
GCC 手册将其描述为
。正如手册继续指出的那样,这与 C99+ 灵活数组成员的用途相同,并且它建议为此使用 FAM 而不是零长度数组。该手册还与 C99 之前使用长度为 1 的数组实现相同目的的传统做法进行了对比,观察到两者对主机结构的大小有不同的影响。我认为这是扩展的最初灵感,并且我认为继续支持是为了向后兼容。
手册没有讨论在其他情况下使用零长度数组,但 GCC 确实接受这一点。没有给出理由,但我认为这是为了与允许结构成员使用它保持一致。C 语义在很大程度上可以与此类数组相一致,尽管它们不是很有用。
至于 Clang,我没有在Clang / LLVM 语言扩展中找到此扩展的文档。如果该系统支持它,那么我最好的猜测是,这是为了与 GCC 兼容,尽管这也可能是并行演进的情况。
需要考虑两点:在现实世界中,空盒子与没有盒子是不同的。如果源语言允许空数组,那么在将代码从一种语言转移到另一种语言时也可能会有所帮助。