美文网首页
C语言变参函数的使用

C语言变参函数的使用

作者: CodingCode | 来源:发表于2024-06-25 03:11 被阅读0次
  1. 定义变参函数
#include <stdarg.h>

void log(const char *fmt, ...)
{
    char buf[1000];

    va_list args;
    va_start(args, fmt);
    vsnprintf(buf, sizeof(buf), fmt, args);
    va_end(args);

    printf("%s\n", buf);
}
  1. 如何调用变参函数
int main() {
  log("int = $d", 10);
  log("str=%d", "abcd");
  return 0;
}
  1. 变参函数调用另一个变参函数

例如,我们定义一个上层函数logv带有一个额外参数级别,只有level大于0时才输出:

void logv(int level, const char *fmt, ...)
{
    if (level > 0) {
        log(fmt, ...);
    }
}

这里应该怎写呢?直接写...肯定是不行的,不认识,而如果:

void logv(int level, const char *fmt, ...)
{
    if (level > 0) {
       va_list args;
        va_start(args, fmt);
        log(fmt, args);
        va_end(args);
    }
}

看起来好像挺合理的,实际上也是不行的,va_list和...不是同一种类型。

正确的做法是,必须定义函数使用va_list作为参数:

static void _log(const char *fmt, va_list args)
{
    vsnprintf(buf, sizeof(buf), fmt, args);
    printf("%s\n", buf);
}

void log(const char *fmt, ...)
{
    va_list args;
    va_start(args, fmt);
    _log(fmt, args);
    va_end(args);
}

void logv(int level, const char *fmt, ...)
{
    if (level > 0) {
        va_list args;
        va_start(args, fmt);
        _log(fmt, args);
        va_end(args);
    }
}

所以:

  1. 定义个内部实现函数_log(const char *, va_list)
    在这个函数使用va_list作为参数,所以在函数内就不再使用va_start()va_end()
  2. 外部函数log()logv()都调用内部函数_log()

相关文章

  • 函数变参的使用

    介绍C/C++,java,和go语言对函数变参的使用。 1. C/C++语言的变参 1.1 变参函数声明 变参函数...

  • 06-GoLang函数

    函数格式 C语言中 Go语言中 C语言函数的类型 1.没有返回值没有形参的函数 .2.有返回值没有形参的函数 3....

  • 变参(C语言)

    这是一个变参函数声明。加三个点就是了。取得参数的套路是 这样三步,就将 各个参数,放在了 buf 中。完整函数如下...

  • go语言函数变参

    例子 函数变参的定义:func Printf(format string, a ...interface{}) (...

  • 2.头文件与类的声明

    C语言和C++语言中 函数与数据使用方法的不同 C语言中由于C语言中没有某些关键字,所以数据可以被全部函数所使用 ...

  • Block对变量的作用(二)

    常见的变量有哪些? 在C语言中常见的变量如下: 自动变量(Auto),也可以称为局部变量 函数参数(形参) 静态变...

  • Note

    C语言基础头文件的使用防止头文件被重复包含宏的使用gcc编译器的基本使用函数的声明、调用、传参 VC Code工具...

  • iOS 进制转换

    1、使用C语言函数 2、使用输出

  • 【C语言学习】如何创建变参函数?

    提到变参函数,我们的感觉是不是既熟悉又陌生?感觉熟悉是因为我们平时都在使用着,如我们常使用的printf()函数与...

  • OC内存区域

    c语言中形参和实参 形参 form parameter实参 real parameter出现在函数定义中的...

网友评论

      本文标题:C语言变参函数的使用

      本文链接:https://www.haomeiwen.com/subject/lrwdcjtx.html