代码之家  ›  专栏  ›  技术社区  ›  daisy

创建带有自定义前缀的printf函数

c
  •  0
  • daisy  · 技术社区  · 6 年前

    [INFO] whatever 123
    

    varu args可以工作,但我不知道如何添加前缀。至少下面的代码不起作用

    #include <stdio.h>
    #include <stdarg.h>
    
    void myprintf (char *fmt, ...)
    {
      va_list argp;
      va_start (argp, fmt); 
      vfprintf (stdout, "[INFO] " fmt, argp); 
      va_end (argp);
    }
    
    int main (int argc , char **argv)
    {
        myprintf ("arg count is %d\n", argc);
        return 0;
    }
    

    有什么想法吗?

    1 回复  |  直到 6 年前
        1
  •  3
  •   gone    6 年前
    "[INFO] " fmt
    

    这个代码不起作用。这里尝试使用的“字符串粘贴”行为是预处理器行为,而不是C运算符。它只能用于字符串常量,不能用于变量。

    在这里得到你想要的行为的最简单的方法就是打电话 printf 两次:

    printf("[INFO] ");
    va_start(argp, fmt);
    vfprintf(stdout, fmt, argp);
    va_end(argp);
    

    • 定义 myprintf() 作为宏而不是函数,以便可以在format参数上使用字符串粘贴。

    • "[INFO] " fmt 并将其用作格式化字符串。

    • 复制 “[信息]” vsnprintf() 将输出附加到缓冲区,然后输出。