C 将宏作为参数指针传递
C pass macro as parameter pointer
我有一个名为ADS_Transmit的函数,声明如下
void ADS_Transmit(uint8_t* data, uint16_t size);
该函数应该以uint8_t的数组作为参数,但在某些情况下,我想在调用该函数时发送宏。像这样
#define ADS_CMD_RST 0x06U
ADS_Transmit(ADS_CMD_RST, 1); // Does not work
uint8_t data = ADS_CMD_RST;
ADS_Transmit(&data, 1); // Works
现在对很多人来说可能很明显,在参数中发送宏是行不通的,因为该函数将使用寄存器 0x06 上的内容。
但是有没有一种方法可以在不改变函数的情况下在参数中发送宏?
提前致谢!
您可以使用 compound literal:
ADS_Transmit(&(uint8_t){ADS_CMD_RST}, 1);
这将创建一个临时 uint8_t
变量,用值 ADS_CMD_RST
初始化,并将其地址传递给 ADS_Transmit
。
请注意,如果 ADS_Transmit
修改了第一个参数指向的内存,您将无法访问更新后的值。
我有一个名为ADS_Transmit的函数,声明如下
void ADS_Transmit(uint8_t* data, uint16_t size);
该函数应该以uint8_t的数组作为参数,但在某些情况下,我想在调用该函数时发送宏。像这样
#define ADS_CMD_RST 0x06U
ADS_Transmit(ADS_CMD_RST, 1); // Does not work
uint8_t data = ADS_CMD_RST;
ADS_Transmit(&data, 1); // Works
现在对很多人来说可能很明显,在参数中发送宏是行不通的,因为该函数将使用寄存器 0x06 上的内容。 但是有没有一种方法可以在不改变函数的情况下在参数中发送宏?
提前致谢!
您可以使用 compound literal:
ADS_Transmit(&(uint8_t){ADS_CMD_RST}, 1);
这将创建一个临时 uint8_t
变量,用值 ADS_CMD_RST
初始化,并将其地址传递给 ADS_Transmit
。
请注意,如果 ADS_Transmit
修改了第一个参数指向的内存,您将无法访问更新后的值。