我的编译器收到错误如下:
C51 COMPILER V9.01 - SN:C1ADC-HAI60D COPYRIGHT KEIL ELEKTRONIK GmbH 1987年至2009年 *警告C260在SEQUENCE.C的第300行中:'=':指针截断 * 错误C190在SEQUENCE.C第301行:'&':不是左值
以下是我的代码:
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);
}
答案 0 :(得分:3)
我们应该猜猜哪一行是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;
。
答案 1 :(得分:1)
unsigned int data timerdata; // what is 'data', is it defined?
bit bdata timerflag; // what are 'bit' and 'bdata', are they defined?
根据上述问题检查您的代码。在真正的攻击之后,编译器错误通常会报告多行。