6.828: Operating System Engineering (16)

以下、inc/stdarg.h のマクロの解析メモ。

va_start(ap, fmt);

は以下に展開される?

	((ap) = (va_list)&(fmt) + __va_size(fmt))

__va_size マクロも展開するのか

	((ap) = (va_list)&(fmt) + (((sizeof(fmt) + sizeof(long) - 1) / sizeof(long)) * 
                                   sizeof(long))

あるいは

va_arg(*ap, unsigned int)

とかだと

(*(unsigned int *)((ap) += __va_size(unsigned int), (ap) - __va_size(unsigned int)))

ううう、comma が意味不明orz
左から順に評価していっちゃん右の値が式の値?
あー成程、先頭進めて戻ったポインタの中身戻す的式って理解で良いのかな。結構無理矢理ですな。