「C だとは思わない」は「C ではない」と同等ではありません。
リンクをありがとう、@Kninnug - これは恐ろしいC99 機能 (および C90 の GNU 拡張機能) であり、コードにはエラーがあります: 3 つの関数ポインターの配列のスペルミスの初期化です。次のような修正コードを想像できます。
#define ABC 3
#define A 0
#define B 1
#define C 2
void function1(int *i)
{
}
void function2(int *i)
{
}
void function3(int *i)
{
}
int main(int argc, char *argv[])
{
void (*foo[ABC]) (int *i) = {
[A] = function1,
[B] = function2,
[C] = function3
};
return 0;
}
これはコンパイルされます。
また:
の値はfoo[D]
? ヌルポインタですか?
さて、何D
ですか?もしD >= ABC
(両方とも非負の整数であると仮定して)、その要素は存在さえしません。の場合、集合体 (構造体、共用体、および配列) の初期化では、初期化子リストに対応する初期化子式がない要素が暗黙的にゼロで初期化されるため、D < ABC
これはポインターです。NULL
(より正確には、それらは「static
記憶期間があるかのように」初期化されます。これはNULL
、ポインターの場合の初期化です。)