Реализация функции printf () - PullRequest
       22

Реализация функции printf ()

1 голос
/ 09 октября 2011

Я работаю на игрушечном языке программирования.Я использую LLVM для генерации машинного кода.Теперь мой вопрос: Как реализовать функцию printf () с нуля? .В программе на C вы вызываете libc и все.Но как работает printf () внутри?

Cheers

1 Ответ

2 голосов
/ 09 октября 2011

В реализации printf() есть две части.

Во-первых, у вас есть некоторые механизмы для вашего конкретного соглашения о вызовах, которые делают возможными различные аргументы.

Во-вторых, хотя вы пишете цикл, который просматривает спецификатор формата, данный функции. Проще говоря, для этого требуется одно из двух действий: либо копировать строку в стандартный вывод (с помощью соответствующего системного вызова для вашей платформы), либо принимать один из переменных аргументов, переданных функции, и отображать их соответствующим образом (снова используя системный вызов для вывода ) для указанного формата.

Например, если вы видите %s, вам нужно получить следующий неиспользованный аргумент, интерпретировать его как указатель char * и затем убедиться, что память, на которую он указывает, будет скопирована на стандартный вывод, пока вы не нажмете '\0'.

...