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言語では未定義であるので,実行結果についても何も定義できない.式自体が無視される可能性や,エラーで終了する可能性もある.さすがに,鼻から悪魔が出てきたりしたら,コンパイラの作者に文句を言いますが.