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函数,参数的数量是否取决于函数的实现?
函数声明中的省略号意味着它将接受许多参数,否则,这些变量参数在运行时是未知的,通过使用标准头文件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与参数匹配。
| 归档时间: |
|
| 查看次数: |
349 次 |
| 最近记录: |