11月
18
いつものように twitter を眺めていたら、sizeof(a++) という摩訶不思議な式が。
いやまあ、sizeof の中に型名だけでなく変数名や構造体のメンバ名も書けることは知っているわけです。たとえば以下のように。
D:\>type a.c #includestruct hoge { int foo; char bar; }; int main(void) { struct hoge a; printf("%d\n%d\n%d\n", sizeof(struct hoge), sizeof(a), sizeof(a.foo)); return 0; } D:\>a.exe 8 4 4 D:\>
で、sizeof が引数として取るのは「型名」または「式」なので、式ならば副作用の有無にかかわらず書けてしまうわけです。
D:\>type b.c #includeint main(void) { int a = 1; printf("%d\n", a); printf("%d\n", sizeof(a++)); printf("%d\n", a); return 0; } D:\>b.exe 1 4 1 D:\>
実際に試してみると、上のように式が表す副作用は発生しません。単に式が表すモノのサイズだけを計算するようです。
だからどうした、って話ですけど。
no comment untill now