Функция в Си с неограниченными аргументами? - PullRequest
6 голосов
/ 30 декабря 2010

Я хочу определить функцию на языке Си, которая может принимать неограниченное количество аргументов любого типа данных. Например: printf(), scanf() и т. Д.

Есть идеи по этому поводу?

Ответы [ 4 ]

8 голосов
/ 30 декабря 2010

Чтобы использовать переменное количество аргументов в C, необходимо включить заголовок

#include <stdarg.h>

printf() в C является примером функции, которая принимает переменное число аргументов.

int printf(const char *fmt, ...)

Подробнее здесь

5 голосов
/ 30 декабря 2010

Объявите функцию как принимающую ... последний аргумент.Вам нужно будет использовать макросы из <stdarg.h>, чтобы получить доступ к аргументам как va_list.

. Если вы просто хотите что-то «вроде printf, но с небольшим дополнительным поведением», тогда вы можетепередать va_list в vprintf, vfprintf или vsprintf.

#include <stdarg.h>
#include <stdio.h>
#include <time.h>

#ifdef __GNUC__
    __attribute__((format(printf, 1, 2)))
#endif
void PrintErrorMsg(const char* fmt, ...)
{
    time_t     now; 
    char       buffer[20];
    va_list    args;

    va_start(args, fmt);
    time(&now);
    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", gmtime(&now));
    fprintf(stderr, "[%s] ", buffer);
    vfprintf(stderr, fmt, args);
    fputc('\n', stderr);
    va_end(args);
}
2 голосов
/ 30 декабря 2010
void printf(char* format, ...)
{
}

Поиск Функции Variadic и varargs.h или stdarg.h (в зависимости от компилятора).

1 голос
/ 30 декабря 2010

См. Заголовок <stdarg.h> и соответствующую документацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...