C 中的函数具有无限/可变数量的参数?

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

如何在 C 中定义一个函数(特别是 C89/C90、C99 和更新版本),该函数可以采用任意数据类型的可变数量的参数。 与以下函数相同:

printf()
scanf()

c
4个回答
13
投票

要使 C 函数接受可变数量的参数,您需要包含标头

#include <stdarg.h>
C 中的

printf()
是采用可变数量参数的可变参数函数 的示例。

int printf(const char *fmt, ...)

更多信息这里,另请参阅 wiki

stdarg.h


9
投票

将函数声明为采用最后一个参数

...
。 您需要使用
<stdarg.h>
中的宏来以
va_list
的形式访问参数。

如果您只是想要“类似

printf
,但有一点额外的行为”,那么您可以将
va_list
传递给
vprintf
vfprintf
vsprintf

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

#ifdef __GNUC__
    __attribute__((format(printf, 1, 2)))
#endif
void PrintErrorMsg(const char* fmt, ...)
{
    time_t     now; 
    char       buffer[20];
    va_list    args;

    va_start(args, fmt);
    time(&now);
    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", gmtime(&now));
    fprintf(stderr, "[%s] ", buffer);
    vfprintf(stderr, fmt, args);
    fputc('\n', stderr);
    va_end(args);
}

2
投票
void printf(char* format, ...)
{
}

查找 Variadic Functions

varargs.h
stdarg.h
(取决于编译器)。


1
投票

请参阅

<stdarg.h>
标题和相关文档。

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