Как записать мой собственный printf () в C?

Поддерживая Angus, я могу ручаться за http://www.clickatell.com . Это использовалось в компании, в которой я раньше работал. Это было очень легкое решение установить и использовать и работавший отлично. Просто необходимо ожидать, сколько сообщений Вы намереваетесь отослать и сообщения оптового заказа. Они являются довольно дешевыми в целом.

12
задан Jonathan Leffler 12 September 2015 в 06:48
поделиться

4 ответа

Если у вас есть время и вам действительно любопытно, вы можете изучить версию GNU libc: См. printf , который, в свою очередь, использует vprintf, который использует vfprintf

6
ответ дан 2 December 2019 в 06:09
поделиться

Справочная страница Linux va_start (3) дает очень хороший пример написания таких функций (намного проще, но в целом есть все основные кирпичики). Также вы можете изучить практически любую реализацию libstdc.

3
ответ дан 2 December 2019 в 06:09
поделиться

Есть по крайней мере две книги с хорошими объяснениями того, как можно написать функцию форматирования, подобную printf () (и полные рабочие примеры):

3
ответ дан 2 December 2019 в 06:09
поделиться

Этот ответ может помочь вам понять, как писать вариативные функции. Обратите внимание, что проверка ошибок / границ не выполняется, атрибуты не устанавливаются, чтобы сообщить компилятору, какие аргументы могут быть подходящими, никаких преимуществ по сравнению с использованием printf () не достигается.

Это может быть или не быть вашим примером ищу.

Соответствующий фрагмент (здесь немного расширен):

#include <stdarg.h>
void _printf(FILE *out, va_list ap)
{
    vfprintf(out, fmt, ap);
}

void printf(const char *fmt, ...)
{
    va_list ap;
    va_start(ap, fmt);
    _printf(stdout, ap);
    va_end(ap);
}

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

Я настоятельно рекомендую взглянуть на реализацию подсистемы printf в BSD (или даже glibc). Вы также можете посмотреть uclibc, dietlibc и т. Д.

1
ответ дан 2 December 2019 в 06:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: