Linux 内核源代码有很多这样的数组字面量:
enum {
FOO,
BAR
};
static const char* const names[] = {
[FOO] = "foo", /* wtf is this? */
[BAR] = "bar",
};
在这里,每一行都明确地指示了所提供值的数组中的索引,而不是依赖于排序。
我不知道要搜索的短语 - 这叫什么?是什么标准定义的?(或者它是一个 GNU 扩展?)我可以用 C++ 还是纯 C 来做这个?试验gcc
,我发现上面的test.c
,
$ gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE
这些命令返回成功:
$ gcc -Wall -c test.c
$ gcc -Wall -c --std=c90 test.c
$ gcc -Wall -c --std=gnu90 test.c
$ gcc -Wall -c --std=iso9899:1990 test.c
$ gcc -Wall -c --std=c1x test.c
这些命令因对 lambdas 的各种抱怨而失败,并且operator=
:
$ g++ -Wall -c test.c
$ g++ -Wall -c --std=c++98 test.c
$ g++ -Wall -c --std=gnu++98 test.c
$ g++ -Wall -c --std=c++0x test.c
$ g++ -Wall -c --std=gnu++0x test.c
这表明这是有效的 C(几乎在任何方言中)但不是 C++。但我持怀疑态度。我不记得在 Linux 内核之外的任何地方看到过这个。例如,我也没有看到它在 C 但不是 C++ 中有效的构造列表中描述。