C &引用;‘之前应为说明符限定符列表*’;代币;变量函数中的误差
我正在尝试编写一个函数,用C语言配置微控制器的外围设备。为此,我使用了C &引用;‘之前应为说明符限定符列表*’;代币;变量函数中的误差,c,pointers,struct,C,Pointers,Struct,我正在尝试编写一个函数,用C语言配置微控制器的外围设备。为此,我使用了va_arg。以下是函数: void init_peripheral(int ID, ...){ va_list device; va_start(device, ID); io * temp; // No error here //io is a structure //IO, USART, LCD are 01, 02, 03. (*temp
va_arg
。以下是函数:
void init_peripheral(int ID, ...){
va_list device;
va_start(device, ID);
io * temp; // No error here
//io is a structure
//IO, USART, LCD are 01, 02, 03.
(*temp).portB.set = set_portB;
if( ID == IO ){
io* config_io; // error:expected specifier-qualifier-list before ‘*’ token
config_io = va_arg(device, *io);
(*config_io).portB.set = set_portB;
(*config_io).portB.clr = clr_portB;
(*config_io).portB.mkin = mkin_portB;
(*config_io).portB.mkout = mkout_portB;
(*config_io).portC.set = set_portC;
(*config_io).portC.clr = clr_portC;
(*config_io).portC.mkin = mkin_portC;
(*config_io).portC.mkout = mkout_portC;
(*config_io).portD.set = set_portD;
(*config_io).portD.clr = clr_portD;
(*config_io).portD.mkin = mkin_portD;
(*config_io).portD.mkout = mkout_portD;
}
else if( ID == LCD ){
lcd *config_lcd;
config_lcd = va_arg(device, *lcd);
//Set necessary params here
}
else if( ID == USART){
usart *config_usart;
config_usart = va_arg(device, *usart);
(*config_usart).init = usart_init;
(*config_usart).transmit = usart_transmit;
(*config_usart).receive = usart_receive;
}
va_end(device);
}
我没有得到行io*temp
的错误,但是得到了io*config\u io的错误代码>
以下是io
结构:
struct __io__{
struct __port__ portB;
struct __port__ portC;
struct __port__ portD;
};
typedef struct __io__ io;
代码看起来是正确的。既然您可以声明temp
,我看不出为什么io\u config
会突然失败。您应该尝试什么:
在函数之前的配置io下添加;可能定义了宏配置io
将io
替换为struct\uuuu io\uuuu
,看看是否可以编译。如果它没有将变量声明移到If()
块之外;可能您的编译器版本不支持它
告诉编译器向您显示预处理的源代码(即,在所有宏都已展开之后)。也许这给了你一个暗示
问题实际上在下一行中,使用va_arg
宏。您发送的是取消引用的指针,而不是类型:
config_io = va_arg(device, *io); // Should be io*
config_lcd = va_arg(device, *lcd); // Should be lcd*
config_usart = va_arg(device, *usart); // Should be usart*
这是一个有编译问题的示例。
这是。旁注,您正在解除对统一化指针(temp
)的引用,这是未定义的行为,可能是seg故障。您能否准确说明io
是如何定义的?是否涉及宏?您的typedef
可能有问题。查看一下。va_arg
的第二个参数应该是一个类型<代码>*io
不是一种类型<代码>io*是,但是。哎呀,感觉很傻。非常感谢你。