gpt4 book ai didi

c - 在 C 可变参数中,是否可以发送不同类型的参数

转载 作者:太空宇宙 更新时间:2023-11-04 05:59:03 25 4
gpt4 key购买 nike

在接收各种类型参数的函数中,我使用了可变参数,我正在将所有参数解码为一种类型,如下所示

va_start (ap, argCount);
for (u4Index = 0; u4Index < argCount; u4Index++)
{
ai4Arg[u4Index] = va_arg (ap, int);
}
va_end (ap);

switch (Opt)
{
case 1:
func1((int) ai4Arg[0],
(int *) ai4Arg[1]);
break;

case 2:
func2((char *) ai4Arg[0],
(int *) ai4Arg[1]);
break;
}

然后我将参数转换为各自的类型。在尝试将参数从 INT4 类型转换为指针时这样做,我收到以下警告“从不同大小的整数 [-Wint-to-pointer-cast] 转换为指针”。高于使用可变参数的权利。

最佳答案

不,那不是使用可变参数的正确方法。

您传递给 va_arg 的类型必须是参数的实际类型。你不能选择一个随机类型,然后再施放它。

也就是说,您当前的代码很有可能在某些平台上 可以正常工作。它可能不适用于其他编译器。它肯定不能在 64 位 Windows 上运行,因为 int 是 32 位而指针是 64 位 - 那么为什么不以正确的方式来做呢?

编辑:

您知道类型后,您应该只调用 va_arg。例如:

va_start (ap, argCount);
switch (Opt)
{
case 1: {
int intParam = va_arg(ap, int);
int *intPtrParam = va_arg(ap, int*);
func1(intParam, intPtrParam);
break;

case 2:
char *charPtrParam = va_arg(ap, char*);
intPtrParam = va_arg(ap, int*);
func2(charPtrParam, intPtrParam);
break;
}
va_end(ap);

关于c - 在 C 可变参数中,是否可以发送不同类型的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22005942/

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