c - 使用枚举作为参数的奇怪编译行为

标签 c function parameters enums pic

我正在尝试使用 XC8 编译器 v1.20 在 MPLAB-X 中编译这(部分)代码:

typedef enum i2cMode {MASTER = 0,SLAVE=1,OFF=2} i2c_mode;
void i2c_init(i2c_mode mode, uint8_t bus);

它位于头文件内部。我尝试了每种组合,也没有数字关联,但最后它总是会输出:

(908) exit status = 1
make[2]: *** [build/pierin/production/main.p1] Error 1
../emu.X/i2c.h:48: error: label identifier expected
make[1]: *** [.build-conf] Error 2
../emu.X/i2c.h:48: error: "}" expected
make: *** [.build-impl] Error 2
../emu.X/i2c.h:48: error: no identifier in declaration
../emu.X/i2c.h:48: error: ";" expected
../emu.X/i2c.h:48: warning: missing basic type; int assumed
../emu.X/i2c.h:51: error: "," expected
../emu.X/i2c.h:51: error: can't mix prototyped and non-prototyped arguments
../emu.X/i2c.h:51: error: function body expected
main.c:41: error: undefined identifier "SLAVE"
main.c:41: error: too many function arguments

其中 48 处是枚举 typedef,51 处是函数原型(prototype)。在 main 中,我可以看到这不会创建 SLAVE 枚举,也不会创建原型(prototype)。 我需要使用普通变量吗?它应该有效,但事实并非如此。我想使用 i2c_mode 类型并使用枚举。这里是错误的还是不必要的?

最佳答案

我解决了。这是自动读取链接外设库的问题,该库正在读取默认的 i2c.h header ,从而产生冲突。更改枚举名称已解决。谢谢。

关于c - 使用枚举作为参数的奇怪编译行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28666820/

相关文章:

C++,命令行,参数

url - 通过URL运行自动化脚本

C:fread返回0

php - 删除数据库行的删除按钮

function - D 编译时函数类型提取

python - 在Python中使用装饰器注入(inject)函数

c++ - boost 参数库

c - 我是线程和信号量的新手,我似乎可以理解为什么我的代码无法正常工作,我们将不胜感激

c - makefile 中对 'func' 错误的 undefined reference

c++ - C代码分解器