keil中定义字符数组的问题
main函数如下:#defineuintunsignedint#defineucharunsignedcharvoidmain(){P0=0xff;P1=30;uchar...
main函数如下:
#define uint unsigned int
#define uchar unsigned char
void main()
{
P0=0xff;
P1=30;
uchar ubox[2]; ************************
while(1)
{
output(keyscan());
ubox[0] = otemp/10+48;**************************
ubox[1] = otemp%10+48; *****************************
switch(flag)
{
case 0: lcd(ubox[]);***********************
break;
case 1: lcd(keyscan());
break;
case 2: lcd(keyscan());
break;
case 3: lcd(ubox[]);
}
DA(otemp);
}
}
编译时报错如下:
MAIN.C(24): error C141: syntax error near 'unsigned'
MAIN.C(24): error C202: 'ubox': undefined identifier
MAIN.C(30): error C202: 'ubox': undefined identifier
MAIN.C(31): error C202: 'ubox': undefined identifier
MAIN.C(34): error C141: syntax error near ']'
省去了部分头文件和全局变量,keyscan和lcd和DA都另有函数,otemp是一个0到99的整形数字,应该是字符数组定义的不对,我最初的目的是把一个整形数字16变成一个字符串16。求大神指点迷津啊!(出错的地方我标了“*******************”)
使用的是uVision4软件,C52语言 展开
#define uint unsigned int
#define uchar unsigned char
void main()
{
P0=0xff;
P1=30;
uchar ubox[2]; ************************
while(1)
{
output(keyscan());
ubox[0] = otemp/10+48;**************************
ubox[1] = otemp%10+48; *****************************
switch(flag)
{
case 0: lcd(ubox[]);***********************
break;
case 1: lcd(keyscan());
break;
case 2: lcd(keyscan());
break;
case 3: lcd(ubox[]);
}
DA(otemp);
}
}
编译时报错如下:
MAIN.C(24): error C141: syntax error near 'unsigned'
MAIN.C(24): error C202: 'ubox': undefined identifier
MAIN.C(30): error C202: 'ubox': undefined identifier
MAIN.C(31): error C202: 'ubox': undefined identifier
MAIN.C(34): error C141: syntax error near ']'
省去了部分头文件和全局变量,keyscan和lcd和DA都另有函数,otemp是一个0到99的整形数字,应该是字符数组定义的不对,我最初的目的是把一个整形数字16变成一个字符串16。求大神指点迷津啊!(出错的地方我标了“*******************”)
使用的是uVision4软件,C52语言 展开
3个回答
展开全部
void main()
{
P0=0xff;
P1=30;
uchar ubox[2]; ************************
那个数组的定义,你可以放到main()函数的外面,也可以放到 P0 = 0xFF之前。
C语言不允许变量定义之前有执行动作,比如你那么 P0 = 0xFF,就属于执行动作,那么,在发生执行动作之后,不允许定义任何变量。这是C语言的语法,但是C++是可以的。
比如说 for(int i = 0;i<9;i++),这句话,在C语言是通不过的,但是在C++是可以的。
{
P0=0xff;
P1=30;
uchar ubox[2]; ************************
那个数组的定义,你可以放到main()函数的外面,也可以放到 P0 = 0xFF之前。
C语言不允许变量定义之前有执行动作,比如你那么 P0 = 0xFF,就属于执行动作,那么,在发生执行动作之后,不允许定义任何变量。这是C语言的语法,但是C++是可以的。
比如说 for(int i = 0;i<9;i++),这句话,在C语言是通不过的,但是在C++是可以的。
追问
哦原来如此!我想再问下,我改过来了,还剩下
case 0: lcd(ubox[]);***********************
这里有问题,报错是和上面最后的一样
当初lcd()函数接口是这个:void lcd(unsigned char dis2[]),我想把字符串32什么的传进去为啥会出问题啊?
追答
你这个类型不对,你直接写lcd(ubox)就行了
你的函数形参是个指针类型,你而如果 lcd(ubox[]),本质上,实参是个uchar类型的,与原来函数定义的不对应,而且,你没有指明ubox[]具体的哪个元素,所以就是个错误。
而ubox本身就代表数组ubox[]的起始地址,其本质是个指针。
展开全部
C51也遵循标准C的规则,所有的变量都申明完毕后才能写实际运行的代码。
因此,main函数中改成这样:
uchar ubox[2];
P0 = 0xff;
P1 = 30;
........
因此,main函数中改成这样:
uchar ubox[2];
P0 = 0xff;
P1 = 30;
........
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请把uchar obox[];放到main()函数外面。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询