我有以下两个结构
typedef struct {
int day;
char action [10];
}DataType1;
和
typedef struct {
int day;
char action [50];
}DataType2;
现在我必须根据某些条件只使用一种结构数据类型。我做过类似的事情
void *ptr;
DataType1 var1;
DataType2 var2;
if (validCondition == true)
{
ptr = &var1;
}
else
{
ptr = &var2;
}
//Used ptr in remaining code
但是使用这个代码我填写可能是我的代码中有一些设计飞行,这就是为什么我需要这种类型的技巧,但无论如何我需要它。我也想到了一些不同的方式,但我怀疑它是如何运作的
if (validCondition == true)
{
#define GENERIC_TYPE DataType1;
}
else
{
#define GENERIC_TYPE DataType2;
}
GENERIC_TYPE myVar;
//use myVar in remaining code
我知道从符号#
开始的行被认为是处理器命令,它将在编译时被知道并替换。但是,我在if
条件下validCondition
更改了运行时间并根据#define
定义。
那么在这种情况下处理器将如何工作?
任何人都有根据条件定义不同数据类型变量的想法吗?
答案 0 :(得分:1)
您可以为这些数据类型定义包装类型:
struct DayAction {
int day;
char *action;
size_t actionlen;
};
然后,拥有该类型的变量,并根据您的条件填写该变量的字段:
struct DayAction day_action;
if (condition()) {
day_action.day = dt1.day;
day_action.action = dt1.action;
day_acion.actionlen = sizeof dt1.action;
}
之后,您可以对day_action
进行操作,因为它指向原始数据。
如果您需要更改dt1.day
,请使DayAction.day
成为指针。
如果您不需要更改action
,请将DayAction.action
设为const char *
。
答案 1 :(得分:0)
如何只保留一个struct
:
typedef struct {
int day;
char *action;
} DataType;
然后根据某些条件,使用您需要的正确字节数调用malloc()
:
DataType dt;
if (checkWhateverCondionYouWant)
dt.action = malloc(someSize);
HTH。