在变参数函数中使用变参数函数。

问题描述 投票:0回答:1

我想在一个变量函数中调用一个变量函数。代码没有出错,但得出的值不正确。正确的做法是什么?

#include <stdarg.h>

void SecondFunction (int count, ...) {
    va_list args;
    va_start(args, count);
    AddValues(count, args);
    va_end(args);
};

void AddValues(int count, ...) {
   va_list args;
   va_start(args, count);

   for(int i=count; i--; )
      processItem(va_arg(args, void*));

   va_end(args);
}
c variadic-functions
1个回答
5
投票

这样做是行不通的,但你可以创建一个类似的函数,用一个 va_list 参数。这正是为什么诸如 vsyslogvprintf 存在。最简单的形式。

void vAddValues(int count, va_list args) {
    int i;
    for (i = count; i--; )
        processItem(va_arg(args, void *));
}

3
投票

仔细阅读 stdarg(3) 或C11标准 n1570 和文件 变函数 在C语言中。

您需要使用 va_list 并可能 va_copy

还阅读了关于 号召力 你的特定C语言实现的。有一个详细的维基百科页面关于 x86调用惯例 这就是标准措辞的动机。

为了获得灵感,可以看看以下函数,如 vprintf(3). 在 练习 落实情况的报告 开源 C标准库 诸如 麝香鸡 你应该会感兴趣。

在理论上(在现实生活中,在 一些 的情况下,在Linux上使用最近的 海湾合作委员会作为一个内置的)。) vprintf 可以在编译器中实现。但由于你可以把它的地址传给你的一些函数,所以它也必须是C标准库中的一个函数。

© www.soinside.com 2019 - 2024. All rights reserved.