我对以下表达式很好奇:
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)
它是C89以来标准C的一部分:
§3.5.7初始化
如果初始化未知大小的数组,则其大小由为其成员提供的初始化程序的数量确定.在其初始化列表的末尾,该数组不再具有不完整的类型.
事实上,有一个几乎确切的例子:
例:
声明
Run Code Online (Sandbox Code Playgroud)int x[] = { 1, 3, 5 };定义并初始化
x为具有三个成员的一维数组对象,因为没有指定大小并且有三个初始值设定项.
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |