2007-05 << 2007-06 >> 2007-07

2007-06-02 (土)

*C言語

プログラミング言語論の課題の改造版.

以下のC言語のプログラムの実行結果について考察せよ.

int main() {
    int a[]={0,0},k=0;
    a[k++]=(k++,1);
    printf("%d\n",a[0]+a[1]);
    return 0;
}

解答

a[0]とa[1]のどちらに代入されるかはコンパイラ依存である.しかし,どちらかに1が代入されるので,「1」が表示される.

……という解答では不十分.

「a[k++]=(k++,1)」という式の動作はC言語では未定義であるので,実行結果についても何も定義できない.式自体が無視される可能性や,エラーで終了する可能性もある.さすがに,鼻から悪魔が出てきたりしたら,コンパイラの作者に文句を言いますが.