gpt4 book ai didi

c - 参数可以是不同结构的函数

转载 作者:太空狗 更新时间:2023-10-29 15:54:07 26 4
gpt4 key购买 nike

我正在尝试获得一些我将在此处简化描述的复杂功能:

我有几种内部变量不同的结构:

struct param1 {
int varA;
int varB;
}p1;

struct param2 {
int varX;
int varY;
int varZ;
}p2;

另一方面,我有一个函数必须与这些结构一起使用,让我们简化它们只打印数据:

void function(int type_of_structure, <<struct param>>)

然后,该函数应该执行如下操作:切换结构类型,并相应地打印值。

switch(type_of_structure)
{
case 1:
printf("param.varA = %d \n",param.varA);
printf("param.varB = %d \n",param.varB);

case 2:
printf("param.varX = %d \n",param.varX);
printf("param.varY = %d \n",param.varY);
printf("param.varZ = %d \n",param.varZ);
}

我知道这可以在 C 中使用带有 void ** 参数和强制转换的函数来完成。但是,我尝试了很多方法都没有成功。

我应该如何在函数中声明<>以便能够区分不同类型的结构?

最佳答案

使用union,这才是真正的方式。

#include <stdio.h>

enum struct_type {
STRUCT_TYPE_A, STRUCT_TYPE_B
};

struct A {
int x;
int y;
};

struct B {
int x;
int y;
int z;
};

union C {
struct A a;
struct B b;
};

void
print(enum struct_type type, union C object)
{
switch (type) {
case STRUCT_TYPE_A:
fprintf(stdout, "(x, y) = %d, %d\n", object.a.x, object.a.y);
break;
case STRUCT_TYPE_B:
fprintf(stdout, "(x, y, z) = %d, %d, %d\n", object.b.x, object.b.y, object.b.z);
break;
}
}


int
main(void)
{
union C a = {.a = {1, 2}};
union C b = {.b = {3, 4, 5}};

print(STRUCT_TYPE_A, a);
print(STRUCT_TYPE_B, b);

return 0;
}

泛型 使用void * 指针在 中非常危险.另外,并不意味着具有泛型类型,如果您习惯于考虑泛型,那么处理它会很困难,但是当您深入理解它时,很明显其他解决方案更合适。

注意:恕我直言,使用 int print_struct_A(FILE *target, const struct A *const object); 并从 print() 函数。

关于c - 参数可以是不同结构的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49012302/

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