早些时候我有一个结构C.
typedef struct c
{
int cc;
}CS;
Run Code Online (Sandbox Code Playgroud)
我曾经调用一个库函数说int getData(CS*x),它返回了我带有数据的上述结构C.
GetData(CS *x)
Run Code Online (Sandbox Code Playgroud)
函数调用曾经像:
CS CSobj;
GetData(&CSObj);
Run Code Online (Sandbox Code Playgroud)
现在有两种结构,比如C和D.
typedef struct c
{
int cc;
}CS;
CS CSobj;
typedef struct d
{
int dc;
int dd;
}DS;
DS DSobj;
Run Code Online (Sandbox Code Playgroud)
函数GetData()已被修改为GetData(void*x).我必须调用库函数说int getData(void*x),它将通过void*paramter返回上述结构之一.函数的返回类型告诉返回哪个结构.
问题是在调用函数GetData()时如何以及要传递的参数,因为我不知道函数将返回哪个结构.有什么办法摆脱这个问题?
你可以使用一个联盟
// define union of two structs
union DorC {
DS DSobj;
CS CSobj;
} CorD;
// call using union
rc = GetData(&CorD);
if (rc == Ctype) {
// use CorD.CSobj;
} else {
// use CorD.DSobj;
}
Run Code Online (Sandbox Code Playgroud)
警告未经测试的un语法检查代码!