我正在编写一些 ocaml 并意识到
[1;2;3]
是 1::2::3::[]
的语法糖。
同样,C 中的数组初始值设定项也是语法糖吗?
int a[] = {1, 2, 3};
编译器必须生成代码来根据需要分配和初始化这些内存。
编译器实际编译的内容与代表语言中其他内容的语法糖之间的界限在哪里?
它是声明数组后跟赋值的语法糖:
int a[3];
a[0] = 1;
a[1] = 2;
a[2] = 3;
对于全局数组,赋值应放在
main()
函数中,因为不能在函数外部进行赋值。
对于本地静态数组,您需要一个静态标志变量来指示数组是否已初始化,因此您不必在每次调用时重新初始化它。
static int a[3];
static a_init = false;
if (!a_init) {
a[0] = 1;
a[1] = 2;
a[2] = 3;
a_init = true;
}
另请注意,当您不使用初始化列表时,您需要显式指定数组大小。