c语言 - XC8 编译器错误"no identifier in declaration"



我最近接管了一些C和固件的工作,遇到了一个看似基本的问题,但我找不到答案。我对C不是很有经验,但我对更高级别的语言有多年的经验。

固件是为PIC18F4865编写的,我无法正确编译和编程。它最初是使用HI-TECH PICC18编译器在MPLAB IDE 8上编写的,但我转到了MPLAB X IDE,一直遇到问题。

首先,我使用的是同样的HI-TECH PICC18编译器,它似乎编程成功,但设备读取不正确。然后我切换到XC8编译器,在编译过程中开始收到一条我无法绕过的错误消息。

C:/_Sable/Firmware_C/libeeprom.h:10: error: no identifier in declaration
C:/_Sable/Firmware_C/libeeprom.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,但这仍然是我想解决的问题。

某些头文件正在使用宏将D_1#define eeprom_read转换为其他内容,可能是空字符串。如果使用不同的函数名#undef eeprom_read,或者执行其他操作导致标头不再包含该宏,则它应该可以工作。

相关内容

最新更新