クイズ 2.7

gcc 拡張でない)C99 として正しい?

enum { k = 0 && (1 / 0) };
void f(void g(void *())) {
    int  a[][3] = { 1, 2, 3, 4, 5, };
    char s[] = { "Hello" }, c = { 1 };
}

ばっちり。*1

*1:k:定数式でも && は短絡 [JIS X3010:2003, 6.6]。f:関数の仮引数では、(配列がポインタに読み替えられるのと同様に)関数は関数ポインタに読み替えられる [6.7.5.3]。a:部分配列を囲う波括弧は不要 [6.7.8]。c と s:スカラー変数の初期値、および文字配列を初期化する文字列リテラルは、波括弧で囲んでも構わない [6.7.8]。