我从编译器中得到一个错误,如下所示:
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那样被修改或分配,而timerdatatimeflag都是。所以你不能用r-values来获取&的地址。就像写&1一样。1本身不作为数据内存中的对象存在。
你应该改写:
tempCond->timer = &timerdata;
tempCond->flag = (unsigned char*)&timeflag;

我不太确定用一个位变量的地址是否合法。最后一行可能无法编译。
或许重新定义结构将有助于:
struct myCond{
...
    bit bdata *flag; // or maybe without bdata
   }

然后你就可以写tempCond->flag = &timeflag;

09-06 16:22