2012-09-21 69 views
0

我最近在工作中接管了一些C和固件職責,並且似乎是一個基本問題,但找不到答案。我對C並不是很有經驗,但是我有多年的高級語言經驗。XC8編譯器錯誤「聲明中沒有標識符」

固件是爲PIC18F4865編寫的,我無法正確編譯和編程。它最初是使用HI-TECH PICC18編譯器在MPLAB IDE 8上編寫的,但是我轉向使用MPLAB X IDE並遇到問題。

首先,我使用了相同的HI-TECH PICC18編譯器,它似乎可以成功編程,但設備讀取不正確。然後,我轉向XC8編譯器,並在編譯期間開始收到錯誤消息,我無法解決。

C:/_Sable/Firmware_C/lib\eeprom.h:10: error: no identifier in declaration 
C:/_Sable/Firmware_C/lib\eeprom.h:10: error: ";" expected 

的eeprom.h文件

#ifndef _EEPROM_H_ 
#define _EEPROM_H_ 

#define EE_ADDR(member) (offsetof(struct ee_map_s, (member))) 

extern unsigned char eeprom_read(unsigned int); // this is line 10 
extern void eeprom_write(unsigned int, unsigned char); 
extern void ee_read(unsigned char, void *vp, unsigned char); 
extern void ee_write(unsigned char, void *vp, unsigned char); 

#endif 

我在網上看了看四周,發現可在前期出現此錯誤包括文件,我檢查了文件和所有似乎是罰款。我甚至重新排列了包含順序,認爲錯誤信息會改變,如果是這樣的話,但錯誤仍然抱怨這條線。

我當時想也許該函數的聲明是無效的,因爲沒有參數的命名,所以我換了10號線:

extern unsigned char eeprom_read(unsigned int addr) 

這並沒有改變任何東西。但是我確實有一種奇怪的感覺,那就是當我再次清理和構建時,並沒有重新編譯eeprom.h。我不知道這是否會發生,或者如何強制它重新編譯。

我不知道修復此問題是否可以解決我遇到的固件問題,或者是否需要返回到MPLAB IDE 8,但仍然是我想解決的問題。

+2

如果您將'eeprom_read'重命名爲其他內容,例如'eeprom_read_test',它會成功編譯嗎?如果是這樣的話,那麼東西可能是'#define' eeprom_read'到其他東西,可能是空字符串。 –

+0

是的!就是這樣。正在包含一些定義eeprom_read和eeprom_write的新文件。如果你做出回答,我一定會接受它。 – kingcoyote

回答

1

某些頭文件正在使用宏將#define eeprom_read轉換成其他的東西,可能是空字符串。如果您使用不同的函數名稱#undef eeprom_read,或者執行其他操作來使標題不再生成該宏,則應該可以正常工作。