初始化没有大小的Array Literal

Dan*_*imm 2 c c89

我对以下表达式很好奇:

int ints[] = { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)

即使在c89的土地上,这似乎也很好.有关于此的文件吗?我似乎无法弄清楚在搜索时使用的正确术语(我宁愿不再阅读并再次阅读整个c89规范).

这是延期吗?编译器只是简单地推断出数组的大小吗?

编辑:我记得你们都喜欢实际编译的代码块,所以这里是:

/* clang tst.c -o tst -Wall -Wextra -Werror -std=c89 */
int main(int argc, const char *argv[]) {
  int ints[] = { 1, 2, 3 }; 
  (void)(ints); (void)(argc); (void)(argv);
  return 0; 
}
Run Code Online (Sandbox Code Playgroud)

Yu *_*Hao 6

它是C89以来标准C的一部分:

§3.5.7初始化

如果初始化未知大小的数组,则其大小由为其成员提供的初始化程序的数量确定.在其初始化列表的末尾,该数组不再具有不完整的类型.

事实上,有一个几乎确切的例子:

例:

声明

int x[] = { 1, 3, 5 };
Run Code Online (Sandbox Code Playgroud)

定义并初始化x为具有三个成员的一维数组对象,因为没有指定大小并且有三个初始值设定项.