Home > Archives > 2010年12月07日

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;

これが最小の解なのだろうか?

Home > Archives > 2010年12月07日

Search
Feeds

Page Top