В реализации printf()
есть две части.
Во-первых, у вас есть некоторые механизмы для вашего конкретного соглашения о вызовах, которые делают возможными различные аргументы.
Во-вторых, хотя вы пишете цикл, который просматривает спецификатор формата, данный функции. Проще говоря, для этого требуется одно из двух действий: либо копировать строку в стандартный вывод (с помощью соответствующего системного вызова для вашей платформы), либо принимать один из переменных аргументов, переданных функции, и отображать их соответствующим образом (снова используя системный вызов для вывода ) для указанного формата.
Например, если вы видите %s
, вам нужно получить следующий неиспользованный аргумент, интерпретировать его как указатель char *
и затем убедиться, что память, на которую он указывает, будет скопирована на стандартный вывод, пока вы не нажмете '\0'
.