gpt4 book ai didi

c - 如何在 C 中分隔#defined 参数

转载 作者:太空宇宙 更新时间:2023-11-04 00:35:15 24 4
gpt4 key购买 nike

我正在做一个嵌入式项目,所有的端口和引脚都是这样定义的:

#define SENSOR_1 gpioPortA,15

有没有办法只提取整数而不创建新的#define?

到目前为止,我使用了 typedef 并从 #define 中分配了 pin 值,如下所示:

typedef struct
{
GPIO_Port_TypeDef port;
uint8_t pin;
}sensor_t;

sensor_t sensor1 = {SENSOR_1};
/* Now sensor1.pin is the pin value */

但我想将 pin 传递给 switch case,为此我只能使用常量值,我宁愿避免使用 if 语句。

有没有办法在没有新#define 的情况下将 pin 传递给 switch case?

最佳答案

简短的回答是否定的。

但是,您可以在需要时使用 sensor1.pin,但不能在 switch 语句的 case 中使用,因为 switch 不支持那里的变量。在这种情况下使用 if-else 语句。

或者这样做:

#define SENSOR_1_PIN   10
#define SENSOR_1 my_port,SENSOR_1_PIN

然后在 switch 中,您在 case 部分使用 SENSOR_1_PIN

switch (condition) {
case SENSOR_1_PIN:
//Do stuff
break;
//....
}

只是再次提醒,因为它已发布在对您的问题的第一条评论中。这样做非常危险。

最正确的方法是这样做:

#define SENSOR_1_PORT   GPIOB
#define SENSOR_1_PIN 15

//If structure order changes here, you may lead to wrong data interpretation
sensor_t sensor1 = {SENSOR_1_PORT, SENSOR_1_PIN};

如果你是 C99 兼容的,你可以这样做更安全:

//If structure order changes here, your data are still properly assigned to fields
sensor_t sensor1 = {.port = SENSOR_1_PORT, .pin = SENSOR_1_PIN};

关于c - 如何在 C 中分隔#defined 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43866537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com