Синтаксис C для создания функции foo (...) - PullRequest
1 голос
/ 10 апреля 2011

Извините за простой вопрос, но как я могу создать C-функцию с неопределенным числом параметров, таких как

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

Я хотел бы создать функцию для использования в качестве оболочки для printk:

void my_printk( const char * format, ...)
{
    printk("my log:");
    printk(format, ...);
    printk("\n");
}

Спасибо

Ответы [ 2 ]

5 голосов
/ 10 апреля 2011

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

Таким образом, вы можете сделать:

void my_printk( const char * format, ...)
{
    va_list ap;
    va_start(ap, format);
    printk("my log:");
    vprintk(format, ap);
    printk("\n");
    va_end(ap);
}

В большинстве случаев любая функция, подобная этой, будет предоставлять 'v'.версия, и ваша тоже должна:

void my_vprintk( const char * format, va_list ap)
{
    printk("my log:");
    vprintk(format, ap);
    printk("\n");
}

void my_printk( const char * format, ...)
{
    va_list ap;
    va_start(ap, format);
    my_vprintk(format, ap);
    va_end(ap);
}
0 голосов
/ 10 апреля 2011

Ты рядом.Посмотрите здесь: http://publications.gbdirect.co.uk/c_book/chapter9/stdarg.html

int f(int, ... );

int f(int, ... ) {
        .
        .
        .
}

int g() {
        f(1,2,3);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...