%u через va_arg возьмет unsigned int (обычно 4 байта), а в аргументе 1 байт лишь. и то есть нам получается повезло что остальные 3 байта оказались нулями
Я этого не знал, пока сейчас не посмотрел, но в Сишных variadic functions аргументы сначала промоутнутся до int https://en.cppreference.com/w/c/language/variadic
что такое "промоутинг"?
всякие типы по размеру меньше int, неявно превращаются в int в случае математических операций или вот тут. Там есть ссылка в статье
Обсуждают сегодня