sizeofは先進的すぎる

Hacker News経由。sizeofの不思議な挙動が話題になっていた。
Humans should think of sizeof() as a function, says Linus Torvalds (lkml.org)

でもsizeofを関数として扱えというのも微妙で、ちゃんとoperatorとして扱うのが正解じゃないかな。
sizeof operator

サンプル
int main(){
int a = 0;
printf("%zu\n", sizeof (a) + 1);
printf("%zu\n", sizeof (a + 999) + 1);
}
この二つは両方とも出力は5になる。これでもsizeofを関数として扱えというのは無理がある。

cの世界にあってこのsizeofは飛び抜けたセンスを光らせていて、引数に型と式を受けることができる。
カッコをつけると型として扱われるからカッコの中で+999なんてやっても無視される。(ビルド警告さえ出ないのはひどい)
考えようによってはsizeofはc唯一のジェネリック関数であって超かっこいいのかもしれない。
名前も珍しく普通に読める。returnとかmainなどと共に数少ない良質な名前だ。sizeだけじゃなくてofがついているのも近未来的。

一番ひどいのはリーナスで

I don't want you writing kernel code.

とキツイニュアンスで相手の人格を全否定に入っている。こんなことを言われた人の気持ちも大切であろう。

ところでsizeofの戻りはsize_tだけど、それをprintfするときに%zを使うべきなのだそうだ。
how-to-print-size-t-variable-portably

‘z’ was introduced in ISO C99. ‘Z’ is a GNU extension predating this addition and should not be used in new code.

こういう不毛なことを避けるためにもリーナスはさっさとLinuxをRustで書けよと誰か言ってやって欲しい