首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一段关于“左值”的延时小程序,俺没看懂,请

2012-03-20 
一段关于“左值”的延时小程序,俺没看懂,请高手指点!这段程序,俺不知道为什么会有延时功能,按俺的想法,是没

一段关于“左值”的延时小程序,俺没看懂,请高手指点!
这段程序,俺不知道为什么会有延时功能,按俺的想法,是没办法实现了。
程序如下://--------------------------------------------------
// Description : Hold program for 0 ~ 65535 ms
// Input Value : usNum --> Delay time
// Output Value : None
//--------------------------------------------------
void CTimerDelayXms(WORD usNum)
{
  if(usNum)
  {
  bNotifyTimer0Int = _FALSE;

  while(_TRUE)
  {
  if(bNotifyTimer0Int)
  {
  bNotifyTimer0Int = _FALSE;

  if(--usNum) 这里是为什么啊???
  TR0 = _ON;
  else
  return;
  }
  }
  }
}

后来,俺在Keil C 中自己比照做个了雷同的,结果编译不过,说(--N不是左值)。请高手指点!
  程序如下:
#include <reg51.h>

#define N 10
#define _FALSE 0
#define _TRUE 1
#define _ON 1

bit bNotifyTimer0Int;
void CTimerDelayXms()
{
  if(N)
  {
  bNotifyTimer0Int = _FALSE;

  while(_TRUE)
  {
  if(bNotifyTimer0Int)
  {
  bNotifyTimer0Int = _FALSE;

  if(--N) // 这里是咋回事呢?????
  TR0 = _ON;
  else
  return;
  }
  }
  }
}


[解决办法]
N是宏定义,在预处理的时候就会被替换成10.编译器并没有为其分配存储空间。
一个有存储空间的变量才能进行--操作。
[解决办法]
#define N 10 

改成

int N = 10;

宏相当与常量,常量不能作为左值,它是右值
[解决办法]
宏无法做自加减操作
只有变量可以!
[解决办法]
其他地方可能改变了bNotifyTimer0Int的值。bNotifyTimer0Int应该是voilate类型的变量或寄存器。

热点排行