我正在尝试用 C 编写一个函数来配置微 Controller 的外围设备。为此,我使用了 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_io;
确实收到错误
这是 io
结构:
struct __io__{
struct __port__ portB;
struct __port__ portC;
struct __port__ portD;
};
typedef struct __io__ io;
最佳答案
问题实际上在下一行,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*
这是 your code ,存在编译问题。
这是 the fixed version .
关于c - "expected specifier-qualifier-list before ‘*’ token “可变参数函数中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11395652/