написание замены для функции, которая принимает переменное количество параметров (c программирование) - PullRequest
1 голос
/ 06 декабря 2009

Я ищу написать функцию для замены fprintf

int fprintf ( FILE * stream, const char * format, ... );

Я не уверен, как определить такую ​​функцию, как эта, потому что после параметра формата эта функция принимает переменное число параметров. В частности, требуется как минимум столько же дополнительных аргументов, сколько указано в формате.

ОБНОВЛЕНИЕ Я нашел ресурс по этой теме (http://publications.gbdirect.co.uk/c_book/chapter9/stdarg.html),, но, похоже, пример не компилируется под Linux, ОС, которую я использую.

Будет полезен пример замены fprintf, которая просто вызывает fprintf.

Это не домашняя работа. Я просто новичок, который пытается научиться программировать в свободное время. Спасибо!

1 Ответ

8 голосов
/ 06 декабря 2009

Вместо того, чтобы звонить fprintf напрямую, вам нужно будет позвонить vfprintf. Например:

#include <stdarg.h>
int myfprintf(FILE *stream, const char *format, ...) {
    va_list args;
    va_start(args, format);
    int r = vfprintf(stream, format, args);
    va_end(args);
    return r;
}

В стандартной библиотеке каждая функция, которая принимает varargs (...), также имеет версию v той же функции, которая принимает параметр va_list. Поскольку вы не можете сконструировать аргументы для динамической передачи ..., вам нужно использовать вариант v для передачи переменных varargs.

...