1. 程式人生 > >keil提示:missing ';' before 'XXX'但又找不到是哪裡少了分號——已解決!

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;

哈哈,原因就不用解釋了吧,一看便知。但這種情況,編譯器為什麼會提示少了分號,這我就不懂啦,麻煩哪個牛人講講其中的奧祕!

        另外為了將導致這種出錯現象的情況列舉的更全面(很容易就找出問題所在的情況就不列舉啦),我將網上其它網友遇到的情況也列舉下:

關於keil出現的兩個奇怪的錯誤  

今天幫同學看程式,發現keil裡面有兩個比較變態的錯誤。,現總結總結唄

問題一:編譯時老是提示某行缺少分號,或者說存在非法字元,但是表面看來有看不出存在異常的符號並且分號也是在英文模式下輸入的,唉,肉眼真的看不出來啦,現在教你一招:用雙斜槓“//”把出錯的這一行註釋掉,這樣你就可以看見這行或許有一些因為你當時輸入時不小心輸入的混亂字元,然後把混亂字元刪掉,最後去掉註釋符,一切就OK了,對於keil的這個漏洞這招真的很有用的;

問題二:編譯時總是提示語法錯誤,表面看來真的沒有什麼,同學就是寫了一個簡單的陣列?問題何在呢?問題出在陣列的名字選擇了data[5],後來隨便換了一個名字竟然不報錯了,看來在keil中用C語言寫程式時也不能動用data這個名字啊,夠狠,切記切記,呵呵。