keil提示:missing ';' before 'XXX'但又找不到是哪里少了分号——已解决!

        今天写一个51程序,keil在编译时总提示丢失了一个分号,但怎么都找不到是哪里丢失了分号,搞了一下午才解决问题,现在把经验在此分享,以求让他人不要犯同样的错误!提示信息为:

LCD12864.H(20): error C129: missing ';' before 'Flag'

我在LCD12864.c文件里定义的u8 Flag = 0;

在LCD12864.H文件里作此声明:extern u8 Flag;

因为问题是出在头文件里,所以现在把LCD12864.H文件里相关代码列出来:

#ifndef  _LCD12864_H
#define  _LCD12864_H
#include <reg52.h>
extern u8 Flag;

编译后出错,然后鼠标双击错误信息,箭头会跳转到extern u8 Flag;这句代码上!

但大家看看:这句根本没少分号(当然它前后几行的语句也都没有少分号的)。

实际问题所在处是extern u8 Flag里的u8!将上述代码改为如下即可:

#ifndef  _LCD12864_H
#define  _LCD12864_H
#include <reg52.h>

#define u8 unsigned char
#define u16 unsigned int
extern u8 Flag;

哈哈,原因就不用解释了吧,一看便知。但这种情况,编译器为什么会提示少了分号,这我就不懂啦,麻烦哪个牛人讲讲其中的奥秘!

        另外为了将导致这种出错现象的情况列举的更全面(很容易就找出问题所在的情况就不列举啦),我将网上其它网友遇到的情况也列举下:

 

       如下文章链接:http://weidebao1985.blog.163.com/blog/static/20368906200971405819673/

关于keil出现的两个奇怪的错误  

 
 

今天帮同学看程序,发现keil里面有两个比较变态的错误。,现总结总结呗

问题一:编译时老是提示某行缺少分号,或者说存在非法字符,但是表面看来有看不出存在异常的符号并且分号也是在英文模式下输入的,唉,肉眼真的看不出来啦,现在教你一招:用双斜杠“//”把出错的这一行注释掉,这样你就可以看见这行或许有一些因为你当时输入时不小心输入的混乱字符,然后把混乱字符删掉,最后去掉注释符,一切就OK了,对于keil的这个漏洞这招真的很有用的;

问题二:编译时总是提示语法错误,表面看来真的没有什么,同学就是写了一个简单的数组?问题何在呢?问题出在数组的名字选择了data[5],后来随便换了一个名字竟然不报错了,看来在keil中用C语言写程序时也不能动用data这个名字啊,够狠,切记切记,呵呵。

 

 

 

 

 

你可能感兴趣的:(BEFORE)