1) нафига? есть stdint.h -- там именно это и сделано, даже называется так же, 2) Случай номер 2 описанный выше (подсовывание uint16_t куда-то вместо ожидаемого int прокатывало на 16-бит платформе и портит соседние переменыне на 32-бит: ожидать warning можно только от scanf, функции без формата его не дадут).