自定义条件包装printf

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义条件包装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(它将在某个全局变量上),但未来它可能是一个需要的条件。

无论如何,现在我只需要在原型和... args ...的身体中使用my_custom_printf的语法。

我正在使用GCC,但我不知道哪个C标准 - 但我们可以尝试一下。

答案

你可以使用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
", 1, "Hello");
    return 0;
}

以上是关于自定义条件包装printf的主要内容,如果未能解决你的问题,请参考以下文章

片段的条件自定义 OnBackPress

为自定义 C 库分发 CFFI 包装器

带有圆角而不是 100% 屏幕宽度的自定义片段对话框

VSCode自定义代码片段——CSS选择器

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段(vue主模板)