今天寫一個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這個名字啊,夠狠,切記切記,呵呵。
