3103|5

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

一个在keil中编译时的问题,比较奇怪。 [复制链接]

下面是一段测试程序:

void main()
{        unsigned char code is[]={0x01,0x01,0x80,0x03};
        char j;
        bit c;
        j = 0;
        data unsigned char code *p;
        p=is;
        while(*p++)
        {
                c=(bit)*p;
                }
        while(1);
}

在keil中编译出错,改成下面的程序之后就没有问题

void main()
{        unsigned char code is[]={0x01,0x01,0x80,0x03};
        char j;
        bit c;
        data unsigned char code *p;
        j = 0;
        p=is;
        while(*p++)
        {
                c=(bit)*p;
                }
        while(1);
}               
这个,就把
data unsigned char code *p;
j = 0;
换了一个位置,怎么就对了呢?

最新回复

谢谢各位and ls.  详情 回复 发表于 2009-8-11 14:13
点赞 关注

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
很正常 很多编译器在对变量操作之后 就不允许声明定义变量了  否则编译出错
但是可以在定义变量的时候初始化
比如
int a;
a =10;
后面就不能再定义一个新变量了
如果你这时候
char b;就会编译出错

如果改成
int a=10;
这个时候在写
char b;没有问题

但是有些编译器对这个要求不严格 在任何地方都可以声明定义变量的

比如iar就可以

vc编写c文件的时候 好像不可以
跟编译器有关
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
很正常。
标准C要求变量的声明在所有的其余操作之前,或者说在{}里的最前。C++是随时随地可声明。
其实可以利用{}来实现随时声明,不过这个变量的生存期也就是{}这么多了。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
j=0; 是一条执行语句,古老的C规定,变量的定义必须在执行语句前面.

在定义的时候初始化不受此限制.比如弄成下面的样子就没问题
char j=0; // *******定义的时候初始化是没问题的
bit c;
data unsigned char code *p;
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

5
 
楼上都回答了。。。我就来凑个数
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 
谢谢各位and ls.
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表