我从编译器中得到一个错误,如下所示:
C51编译器V9.01-序列号:C1ADC-HAI60D版权所有KEIL ELEKTRONIK GmbH
1987-2009年
*序列第300行中的警告C260。C:“=”:指针截断
*SEQUENCE.C:“&”的第301行出现错误C190:不是左值
以下是我的代码:
struct myCond{
unsigned char currStatus;
unsigned char prevStatus;
unsigned int *timer;
unsigned char *flag;
}
struct myCond StatCond;
unsigned int data timerdata;
bit bdata timeflag;
void someSubroutine (void)
{
struct myCond *tempCond;
tempCond = &StatCond;
tempCond->timer = &((unsigned int)timerdata);
tempCond->flag = &((unsigned char)timeflag);
}
最佳答案
我们应该猜猜301是哪条线吗?
据我所知,问题在于:
tempCond->timer = &((unsigned int)timerdata);
tempCond->flag = &((unsigned char)timeflag);
(unsigned int)timerdata
和(unsigned char)timeflag
是值,r-values
更精确。它们不能像l-values
那样被修改或分配,而timerdata
和timeflag
都是。所以你不能用r-values
来获取&
的地址。就像写&1
一样。1
本身不作为数据内存中的对象存在。你应该改写:
tempCond->timer = &timerdata;
tempCond->flag = (unsigned char*)&timeflag;
我不太确定用一个位变量的地址是否合法。最后一行可能无法编译。
或许重新定义结构将有助于:
struct myCond{
...
bit bdata *flag; // or maybe without bdata
}
然后你就可以写
tempCond->flag = &timeflag;
。