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

时间:2015-02-23 04:14:59

标签: c function parameters enums pic

我正在尝试用MPC-X编译这部分代码,使用XC8编译器,v1.20:

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是enum typdef,51是函数原型。在main中我可以看到,这不会创建SLAVE枚举,也不会创建原型。 我需要使用正常变量吗?它应该工作,但事实并非如此。我想使用i2c_mode类型并使用枚举。这是错的还是不必要的?

1 个答案:

答案 0 :(得分:0)

我解决了。这是一个自动读取链接外设库的问题,它正在读取默认的i2c.h头文件,从而产生冲突。改变枚举名称已经解决了。感谢。