Wrap printf с пользовательским условием - PullRequest
2 голосов
/ 29 апреля 2019

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

В основном каждый код, в котором я бы написал:

printf(" [text and format] ", ... args ...);

Я хочу написать что-то вроде

my_custom_printf(" [text and format] ", ... args ...);

Что тогда реализуется так:

int my_custom_printf(const char* text_and_format, ... args ...)
{
    if(some_condition)
    {
        printf(text_and_format, ... args...);
    }
}

Первая версия условия будет независима от аргументов (это будет для некоторой глобальной переменной), но в будущем это может быть аргумент условия один, который требуется.

В любом случае, сейчас мне просто нужен синтаксис для ... args ... в прототипе и тело my_custom_printf.

Я использую GCC, но я не знаю, какой стандарт C - но мы можем просто попробовать кое-что.

1 Ответ

3 голосов
/ 29 апреля 2019

Вы можете использовать vprintf :

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

static bool canPrint = true;

int myprintf(const char *fmt, ...)
{
    va_list ap;
    int res = 0;

    if (canPrint) {
        va_start(ap, fmt);
        res = vprintf(fmt, ap);
        va_end(ap);
    }
    return res;
}

int main(void)
{
    myprintf("%d %s\n", 1, "Hello");
    return 0;
}
...