【发布时间】:2012-04-01 03:10:31
【问题描述】:
只是好奇,如果我在代码中定义一个零长度数组int array[0];,实际上会发生什么? GCC 完全没有抱怨。
示例程序
#include <stdio.h>
int main() {
int arr[0];
return 0;
}
澄清
我实际上是想弄清楚零长度数组是否以这种方式初始化,而不是像 Darhazer 的 cmets 中的可变长度那样被指向,是否被优化了。
这是因为我必须将一些代码发布到野外,所以我试图弄清楚我是否必须处理 SIZE 被定义为 0 的情况,这发生在一些代码中静态定义int array[SIZE];
我真的很惊讶 GCC 没有抱怨,这导致了我的问题。从我收到的答案来看,我认为没有警告主要是由于支持尚未使用新 [] 语法更新的旧代码。
因为我主要想知道这个错误,所以我将 Lundin 的答案标记为正确(Nawaz 的答案是第一个,但它并不完整)——其他人指出它对尾部填充结构的实际用途,虽然相关,并不是我想要的。
【问题讨论】:
-
@AlexanderCorwin:不幸的是,在 C++ 中,由于存在未定义的行为、非标准扩展和其他异常情况,自己尝试一些东西通常不是获得知识的途径。
-
@JustinKirk 通过测试并看到它有效,我也被困住了。由于我在帖子中收到的批评,我了解到测试并使其正常工作并不意味着它是有效和合法的。所以有时自检是无效的。
-
@JustinKirk,请参阅Matthieu's answer,了解您将在何处使用它的示例。它也可能在数组大小是模板参数的模板中派上用场。问题中的示例显然与上下文无关。
-
@JustinKirk:Python 中的
[]甚至C 中的""的目的是什么?有时,您有一个需要数组的函数或宏,但您没有任何数据可放入其中。 -
什么是“C/C++”? 这是两种不同的语言