0

我的编译器出现如下错误:

C51 编译器 V9.01 - SN:C1ADC-HAI60D 版权所有 KEIL ELEKTRONIK GmbH 1987 - 2009 * SEQUENCE.C 第 300 行中的 C260 警告:'=':指针截断 * 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);
  }
4

2 回答 2

3

我们是否应该猜测哪一行是 301?

据我了解,问题在这里:

tempCond->timer = &((unsigned int)timerdata);
tempCond->flag = &((unsigned char)timeflag);

(unsigned int)timerdata准确地说,(unsigned char)timeflag是价值观。r-values它们不能被修改或分配,不像l-values,它是普通的timerdatatimeflag是。所以你不能使用r-valueswith的地址&。这与写作相同&11它本身并不作为数据存储器中的对象存在。

你应该改写:

tempCond->timer = &timerdata;
tempCond->flag = (unsigned char*)&timeflag;

而且我不太确定获取位变量的地址是否合法。最后一行可能无法编译。

也许重新定义结构会有所帮助:

struct myCond{
...
    bit bdata *flag; // or maybe without bdata
   }

然后你会写tempCond->flag = &timeflag;.

于 2012-09-14T12:36:52.347 回答
1
unsigned int data timerdata;  // what is 'data', is it defined?
bit bdata timerflag;  // what are 'bit' and 'bdata', are they defined?

根据我上面的问题检查您的代码。编译器错误通常在真正的攻击之后多行报告。

于 2012-09-14T12:23:46.943 回答