首页 > 解决方案 > 标准功能的问题

问题描述

我正在尝试为 c 做类似字典之类的事情。我希望将不同类型的数据存储在字典中。为了获得无限数量的值,我使用了stdarg.h但在确定数据类型时遇到了问题。我有几个问题:

如何确定每个元素的数据类型?

我怎样才能创建一个循环,直到元素结束?

例如来自 K&R 的这段代码

include <stdarg.h>
/* minprintf: минимальный printf с переменным числом аргумент */
void minprintf(char *fmt, ...)
{
    va_list ар; /* указывает на очередной безымянный аргумент */
    char *p, *sval;
    int ival;
    double dval;
    va_start(ap, fmt); /* устанавливает ар на 1-й безымянный аргумент */
    for (p = fmt; *р; р++) {
        if (*p != '%') {
            putchar(*p);
            continue;
        }
        switch (*++р) {
        case 'd':
            ival = va_arg(ap, int);
            printf ("%d", ival);
            break;
        case 'f':
            dval = va_arg(ap, double);
            printf("%f", dval);
            break;
        case 's':
            for (sval = va_arg(ap, char *); *sval; sval++)
            putchar(*sval);
            break;
        default:
            putchar(*p);
            break;
        }
    }
    va_end(ap); /* очистка, когда все сделано */
}

这里fmt是包含数量元素的字符串。

但是我怎样才能写一个不包含这个字符串的函数呢?

例如:

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

void test (const char *, ...);

int main ()
{
    test("Hello", "world", 15, 16.000);

    return 0;
}

非常感谢您抽出宝贵时间。

标签: c

解决方案


你不能。

C 根本没有为可变参数函数提供任何方法来独立检测传递的参数类型,也没有提供它们的数量。所以你必须设计你的函数,以便它可以从调用者提供的其他信息中解决这个问题。


推荐阅读