マクロか疑似関数じゃないとsetjmp()は実装しにくいでしょ。
ほとんど全てのregisterを保存しないといけないわけだから。
関数で実装するとstackのrewindして(から)保存しないといけないからね。

C99でもgetcなんかもマクロなんじゃないの?