マイクロコントローラーの周辺機器を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).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;