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
これらのコマンドは、ラムダと に関するさまざまな苦情で失敗します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 カーネル以外で使われているのを見た覚えがありません。また、たとえば、this list of constructs valid in C but not C++にも記載されていません。