Я бы сказал, что все они берут свое начало от BCPL. Мы использовали BCPL для программирования операционных систем для процессора 6809 два десятилетия назад, и он имел функцию writef()
, которая принимала аргументы, такие как %i2
(эквивалент C * %2d
).
C был основан на урезанной версии BCPL и унаследовал аналогичный механизм для форматирования вывода, и я вполне уверен, что все остальные экземпляры извлекли его из C после этого.
Я могу ошибаться, это будет не первый или последний раз, но я уверен, что это правильно, учитывая то, что я знаю о языке BCPL и его происхождении.