gpt4 book ai didi

c - 在 C 中使用带有任意数量参数的函数的参数

转载 作者:太空狗 更新时间:2023-10-29 15:14:00 24 4
gpt4 key购买 nike

我刚读过:"C void arguments"关于 C 中这些函数定义之间的区别:

int f(void)

int f()

了解到第二种形式意味着函数返回带有任意数量参数的整数,我想知道我们如何实际访问和使用这些未知参数

我很想获得示例代码和解释。

另外,我知道 C 中 Varargs 的机制(使用 va_argva_endva_start 函数),很高兴听到关于这种机制和上面提到的f()形式的区别

非常感谢!

最佳答案

第二个版本接受可变数量的参数,它接受固定(但未指定)的参数序列。实际上,它声明了函数,但没有原型(prototype)函数。因此不会检查对该函数的调用是否有效。编译器通常会查看对该函数的第一次调用,并根据第一次调用中发现的类型检查其他调用。

这就是为什么,如果您省略 #include <stdio.h> , 第一次调用 printf将是可以接受的,但任何调用 printf使用不同的类型会产生错误。例如。

int main() {
printf("hello"); //<--- accepted, compiler may assume `int printf(char *);`
printf("%s", "world"); //<--- error, type mismatch
}

要让函数接受一个可变数字,它必须至少有一个固定参数,然后是标记 ... .

int f (int first, ...);

您需要包含 stdarg.h头文件。并且该函数可以使用宏访问参数。

void f (int c,...){
va_list ap;
va_start(ap, c);
for(;c--;)
printf("%d", va_arg(ap,int));
va_end (ap);
}

将固定参数作为剩余参数的计数很方便。您还需要以某种方式确定每个参数的类型。在本例中,假定它们都是 int .

关于c - 在 C 中使用带有任意数量参数的函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18792556/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com