我试图从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微控制器的项目执行此操作。
答案 0 :(得分:1)
当您在if范围内声明变量时,由于范围限制,它不可能在其外部访问。
假设你只想根据奇数/偶数端口指向不同的数据,你只需要将_port的范围增加到你需要的任何东西。
如果您尝试使用不同的变量访问相同的内存,则可以使用union
结构的一种方法。无论如何,您将需要增加变量的范围。
答案 1 :(得分:0)
您不能在当前范围之外声明非extern的任何内容。您可以在函数,文件或全局范围中声明_port变量,然后在gpio_flag
函数中设置其值。如果DIO_PORT_Odd_Interruptable_Type
和DIO_PORT_Even_Interruptable_Type
是PORT_t的别名,那么您只需定义PORT_t _port;
并跟踪bool _portIsEven;
是奇数还是偶数。