C51编程错误 MAIN.C(23): error C247: non-address/-constant initializer

程序是产生一个0到5的随机数
程序如下
unsigned char x=(char) rand()%5;
结果报错,求大神解答
#include "reg51.h"
#include "intrins.h"
#include "seg.h"
#include "SMC162.h"
#include "stdlib.h"
#include "math.h"
sbit k1=P1^5;
sbit k2=P1^6;
sbit k3=P1^7;
void InitTimer();
void delay(int t);

unsigned char TIMERH=0xFF;
unsigned char TIMERL=0xFF;
char a;
char * b=&a;
char n=0;
unsigned char dispram[4];
unsigned char r[5];
unsigned char p;
unsigned char an;
unsigned char *an1=&an;

void main ()
{ unsigned char x;
x=(char) rand()%5;
unsigned char *x1;
x1=&x ;
unsigned char y;
y=(char) rand()%5;
unsigned char *y1;
y=(char) rand()%5;
y1=&y;
P0=0xFF;
P1=0xFF;
P2=0xFF;
LcdInit();

PutStr(0,0," password: ");
dispram[0]=dispram[1]=dispram[2]=dispram[3]=0;
InitTimer();
TR1=1;
WriteSegData(dispram[0]);
WriteCsData(0x01);
while(1)
{
...}

不能通过引用变量的方式给变量赋初值。
unsigned char x;
……
x=(char) rand()%5;
这样就可以了追问

可改成那样之后还是报错:
MAIN.C(26): error C279: 'x': multiple initialization
MAIN.C(26): error C231: 'x': redefinition

追答

把所有的贴上来,单独一句话怎么看?

追问

程序开头就在上面了,C51编程,主要是要把那个x,y产生的随机数显示在1602液晶上

追答

你这个在C语言里这样间隔的定义变量有问题哎!
unsigned char x;
unsigned char *x1;
unsigned char y;
unsigned char *y1;

x=(char) rand()%5;
x1=&x ;
y=(char) rand()%5;
y=(char) rand()%5;
y1=&y;
我把你的程序这样修改(当然去除所有的函数的调用),没有错误!
另外:你的头文件有和主程序中定义同名的变量。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-23
这只是个中断函数,应该加上主函数,相当于是汇编语言的主程序。
追问

饿。。。我这只是贴了函数报错的一部分,主函数是有的

相似回答