2010年12月07日
C言語のクイズ
適当なXを持ってきて以下の二つの文が等価でないことを示せ:
X += e; X = X + e;
まあ,副作用のある関数 f の呼び出しを X に上手く入れられれば等価でないことを言えるのだけど,単純に X を f() にしただけでは左辺値じゃないと怒られる.何かでくるんで左辺値にすればオッケー.
f()を含んだ左辺値になる式は色々あるけれど,例えば配列へのアクセス a[f()] なんてのはその候補.さて,では,そのような式の中で最小のものは何なんだろうか? ゴルフする人間としては気になる.
で,さっき思いついたけど,ポインタを返す副作用のある関数 f を持ってきて X に *f() を入れれば以下の二つの文は等価じゃない.
*f() += e; *f() = *f() + e;
これが最小の解なのだろうか?
- Comments: 0
- TrackBack (Close): -