c语言定义全局数组问题?

为什么我的放到子函数以外就不行?必须要放进子函数里,应该怎么做?#defineuintunsignedint#defineucharunsignedcharvoidsz(... 为什么我的放到子函数以外就不行?必须要放进子函数里,应该怎么做?

#define uint unsigned int
#define uchar unsigned char

void sz();

void ys(uint);
void wd();
void R();
void G();

uchar led1,led2,led3,led4;
uchar x=100;

void sz()
{

if(P04==0)

{
G();
}

else {

R();
}

}
void G()
{
uchar a[]={0xc0,0xcf,0xa4,0x86,0x8b,0x92,0x90,0xc3,0x80,0x82,0x7f,0xb3,0xff};
uchar A[]={0xc0,0xcf,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90,0x7f,0xb3,0xff};
uchar wei[]={0x00,0x10,0x20,0x40,0x80};

P14=1;
P2=A[led1];
P14=0;

P13=1;
P2=wei[1];
P13=0;
ys(x);

//-------------------------

P14=1;
P2=A[led2];
P14=0;

P13=1;
P2=wei[2];
P13=0;
ys(x);

//-------------------------

P14=1;
P2=a[led3];
P14=0;

P13=1;
P2=wei[3];
P13=0;
ys(x);

//-------------------------

P14=1;
P2=a[led4];
P14=0;

P13=1;
P2=wei[4];
P13=0;

ys(x);
}

void R()
{
uchar a[]={0xc0,0xcf,0xa4,0x86,0x8b,0x92,0x90,0xc3,0x80,0x82,0x7f,0xb3,0xff};
uchar A[]={0xc0,0xcf,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90,0x7f,0xb3,0xff};

uchar WEI[]={0x00,0x08,0x04,0x02,0x01};

P14=1;
P2=A[led1];
P14=0;

P13=1;
P2=WEI[1];
P13=0;

ys(x);
//****************************
P14=1;
P2=A[led2];
P14=0;

P13=1;
P2=WEI[2];
P13=0;

ys(x);
//****************************
P14=1;
P2=a[led3];
P14=0;

P13=1;
P2=WEI[3];
P13=0;

ys(x);
//****************************
P14=1;
P2=a[led4];
P14=0;

P13=1;
P2=WEI[4];
P13=0;

ys(x);
}
展开
 我来答
叁生万物
推荐于2017-10-15 · TA获得超过6259个赞
知道小有建树答主
回答量:2871
采纳率:41%
帮助的人:1026万
展开全部
在C语言中,全局变量和函数声明及定义并列,也就是说,声明在最外层作用域的变量即为全局变量

如在如下程序中
int i;

int main()
{
int i_copy = i;
i = 9;
return 0;
}
int i就是一个全局变量,故在main函数中可以调用或修改i的值
所以,定义数组也和普通全局变量的方法相同,如
char str[10];

int main()
{
str[0] = 'a';
str[1] = '\0';

return 0;
}

但是有几点需要注意:
C中自上向下语法分析和编译语法树,如果要让所有函数都能调用该全局变量,就要把其放在所有函数定义之前,确保声明的作用域覆盖整个程序;
在全局变量声明时,其初始值必须为编译时常量,不能为变量;
若要使用程序外的全局变量,需要在修饰符中加入extern关键字,并不要忘了和原本定义处链接
匿名用户
2013-09-10
展开全部
单片机的LED控制?数组在子函数外作全局变量是可以的,我就经常这么定义。你的程序主函数呢?void main?问题不在子函数的数组调用这。全局数组的定义语句一般是uchar code table[] ={};和一般的数组定义不同,必须加code,你看是不是这个问题。详细你可以找我私戳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5ffd0d3
2013-09-11 · TA获得超过718个赞
知道小有建树答主
回答量:386
采纳率:100%
帮助的人:241万
展开全部
/***************************************************************************
把你的所有函数体写在main函数前面,就不用在前面进行函数声明;
数组什么时候加code,这个是有讲究的,在程序运行中不对数组里的内容
进行修改时,这时可以加上code;如果在程序运行中要对数组里的内容进行
修改,那么就不能加上code;比如在你程序中就可以加上code.
****************************************************************************/
#define uint unsigned int
#define uchar unsigned char
uchar a[]={0xc0,0xcf,0xa4,0x86,0x8b,0x92,0x90,0xc3,0x80,0x82,0x7f,0xb3,0xff};
uchar A[]={0xc0,0xcf,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90,0x7f,0xb3,0xff};
uchar WEI[]={0x00,0x08,0x04,0x02,0x01};
uchar led1,led2,led3,led4;
uchar x=100;
void sz()
{
if(P04==0)
{
G();
}
else
{
R();
}
}
void G()
{
P14=1;
P2=A[led1];
P14=0;
P13=1;
P2=wei[1];
P13=0;
ys(x);
//-------------------------
P14=1;
P2=A[led2];
P14=0;
P13=1;
P2=wei[2];
P13=0;
ys(x);
//-------------------------
P14=1;
P2=a[led3];
P14=0;
P13=1;
P2=wei[3];
P13=0;
ys(x);
//-------------------------
P14=1;
P2=a[led4];
P14=0;
P13=1;
P2=wei[4];
P13=0;
ys(x);
}

void R()
{
P14=1;
P2=A[led1];
P14=0;
P13=1;
P2=WEI[1];
P13=0;
ys(x);
//****************************
P14=1;
P2=A[led2];
P14=0;
P13=1;
P2=WEI[2];
P13=0;
ys(x);
//****************************
P14=1;
P2=a[led3];
P14=0;
P13=1;
P2=WEI[3];
P13=0;
ys(x);
//****************************
P14=1;
P2=a[led4];
P14=0;
P13=1;
P2=WEI[4];
P13=0;
ys(x);
}
void main( void )
{

}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式