c - "expected specifier-qualifier-list before ‘*’ token “可变参数函数中的错误

标签 c pointers struct

我正在尝试用 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/

相关文章:

c - FIFO文件和读/写

c++ - GCC下的_rotl64相当于什么

c - 从与结构不兼容的指针类型进行赋值

java - 不满意的链接错误 : no library file in java. library.path

c - C 中的匿名类型

c++ - 将指向成员函数的指针作为 void* 函数的参数传递

Objective-C:对象实例指针

正在释放的 C++ 指针未分配错误

c++ - 如何使用自定义结构初始化 boost::array?

c - 将结构成员数组传递给 C 中的函数