Поскольку он не строго типизирован, я подумал, что он просто выбрал правильный размер памяти и интерпретировал его в зависимости от типа аргумента. Но float и double используют% f и имеют разные размеры.
P.S. Я вижу, как продвижение путем копирования значения в temp и кастинга (правильно?) Может работать но как это работает для scanfs / sscanf?