Я работаю над определенным языком сценариев.Значения, содержащие структуру
struct myvar
{
char name[NAMELEN];
int type;
void* value;
}
type = 0 --> int* value
type = 1 --> char* value
type = 2 --> float* value
Я столкнулся с некоторой проблемой с арифметическими операциями.Кажется, что мне нужно совершать все виды преобразований типов для каждой отдельной операции, которая превращается в написание целой связки кода для каждой из них, например:
case 0: // "="
if(factor1.name)
{
if((factor1.type == 1) && (factor2.type==1))
{
free(factor1.value);
int len = (strlen((STRING)factor2.value)+1)*sizeof(char);
factor1.value = malloc(len);
memcpy(factor1.value,factor2.value,len);
}
else if((factor1.type == 2) && (factor2.type==2))
*(FLOAT*)factor1.value = *(FLOAT*)factor2.value;
else if((factor1.type == 0) && (factor2.type==0))
*(INTEGER*)factor1.value = *(INTEGER*)factor2.value;
else if((factor1.type == 0) && (factor2.type==2))
*(INTEGER*)factor1.value = *(FLOAT*)factor2.value;
else if((factor1.type == 2) && (factor2.type==0))
*(FLOAT*)factor1.value = *(INTEGER*)factor2.value;
else
GetNextWord("error");
}
break;
Есть ли способ избежать этогоутомительная процедура?В противном случае у меня нет выбора, кроме как скопировать и вставить этот фрагмент кода для каждого из "=", "~", "+", "-", "*", "/", "%", ">", "<», "> =", "<=", "==", "~ =", "И", "ИЛИ" </p>