我正在研究某种脚本语言。包含结构的值是某些脚本语言的算术运算
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;
是否有某种方式来避免这种令人厌烦的过程?否则我别无选择,只能复制粘贴“=”,“〜”,“+”,“ - ”,“*”,“/”,“%”,“>”,“ <“,”> =“,”< =“,”==“,”〜=“,”AND“,”OR“
不是一个答案,但你知道,你有同样的情况两次? '((factor1.type == 1)&&(factor2.type == 1))' – MByD
@MByD,我认为第一对应该是0,0,因为它正在做字符串复制,并且类型0是字符串。 – AShelly
哦,是的,我的错。感谢您的评分,我只是在关注主要问题的同时从头开始。 – Anonymous