C函数参数列表中```参数的含义是什么?

Hul*_*ulk 5 c function-parameter

可能重复:
C/C++:传递可变数量的参数

根据功能申报方式

return-type function-name(parameter-list, ...) {body ...}

以下代码是一种重载吗?

(在A_FILE.h中)

typedef VOID *FUNCTION(UINTN Number, ...);

似乎我可以将一个Number参数或更多参数传递给FUNCTION函数,参数的数量是否取决于函数的实现?

t0m*_*13b 3

函数声明中的省略号意味着它将接受许多参数,否则,这些变量参数在运行时是未知的,通过使用标准头文件stdarg.h,该头文件“stdarg.h”中的各个函数可以确定什么每个变量参数构成传递给函数的参数。

考虑这个代码示例:

#define PANIC_BUF_LEN 256
void panic(const char *fmt, ...){
    char buf[PANIC_BUF_LEN];
    va_list argptr;
    va_start(argptr, fmt);
    vsprintf(buf, fmt, argptr);
    va_end(argptr);
    fprintf(stderr, buf);
    exit(errcode);
}
Run Code Online (Sandbox Code Playgroud)

典型的调用可以是示例之一:

panic("Error: %s failed! Due to unknown error, message is '%s'\n", "my_function", "Disk not ready");
Run Code Online (Sandbox Code Playgroud)

将以这种方式在控制台上产生输出:

Error: my_function failed! Due to unknown error, message is 'Disk not ready'
Run Code Online (Sandbox Code Playgroud)

请注意函数如何使用va_start(...)va_end(...)更不用说vsprintf(...)将负责填充所提供的 va_list“未知”参数中的空白,并初始化为指向运行时未知变量参数。

编辑:只是强调一下,调用假定 C 字符串格式形式的字符串参数小于PANIC_BUF_LEN中表示的最大大小,撇开挑剔不谈,即说明函数如何接受使用的标准 C 格式化字符串的数量,例如,可以%d在字符串格式中指定,并期望 aint与参数匹配。