从if if语句(C)

时间:2017-10-26 19:12:55

标签: c embedded

我试图从if语句中声明一个变量,因为根据条件,变量将是一个不同的类型,以便以后使用。

uint8_t gpio_flag(PORT_t * port, uint8_t pin) {
    if(getType(port)) {     // odd
        DIO_PORT_Odd_Interruptable_Type * _port = port;
    }
    else {                  // even
        DIO_PORT_Even_Interruptable_Type * _port = port-1;
    }

    return ((_port->IFG & (1<<pin))==1);
}

Odd_int_type和Even_int_type都是具有IFG成员的结构。 getType只在奇数时返回1,如果偶数则返回0。

但是,_port的范围在if语句中,因此它不起作用。有解决方法吗?

尝试为我正在使用MSP432P401R微控制器的项目执行此操作。

2 个答案:

答案 0 :(得分:1)

当您在if范围内声明变量时,由于范围限制,它不可能在其外部访问。 假设你只想根据奇数/偶数端口指向不同的数据,你只需要将_port的范围增加到你需要的任何东西。 如果您尝试使用不同的变量访问相同的内存,则可以使用union结构的一种方法。无论如何,您将需要增加变量的范围。

答案 1 :(得分:0)

您不能在当前范围之外声明非extern的任何内容。您可以在函数,文件或全局范围中声明_port变量,然后在gpio_flag函数中设置其值。如果DIO_PORT_Odd_Interruptable_TypeDIO_PORT_Even_Interruptable_Type是PORT_t的别名,那么您只需定义PORT_t _port;并跟踪bool _portIsEven;是奇数还是偶数。