gpt4 book ai didi

c++ - 使用数组作为 "goto"标签

转载 作者:搜寻专家 更新时间:2023-10-31 02:04:18 24 4
gpt4 key购买 nike

我正在做一个 Arduino 项目,想知道是否可以在 goto 命令中使用数组中的值。基本上,如果我有一个字符串数组,其中每个项目对应于我的代码中的一个标签,有没有办法将具有适当索引值的数组作为命令的标签?我只包含一部分不完整的代码,希望能帮助传达我的观点。

int power = 2;
String Labels[4] = {"chip_1", "chip_2", "chip_3", "end"};

chip_1: //label
power += 1;
for (int i = 0; i <= 2; i++) {

buttonState[i] = digitalRead(buttonPins[i]);

if (buttonState[i] != buttonLastState[i]){
if (buttonState[i] == HIGH) {
Serial.println("Button" + String(i) + "ON");
digitalWrite(buttonPins[i], HIGH);
}
else {
Serial.println("Button" + String(i) + "OFF");
digitalWrite(buttonPins[i], LOW);
}

buttonLastState[i] = buttonState[1];
}

}
goto Labels[power]

chip_2: //next label

基本上,我有几个 MCP23017 扩展器 IC,每个都将在各自的引脚上运行基本相同的 for 循环。然后我希望能够有一种方法告诉微 Controller 以特定顺序激活扩展器芯片的 for 循环。我的计划是拥有一个具有不同标签的数组,这样我就可以根据最近使用的标签更改标签的顺序,从而根据需要更改循环的执行顺序。我没有排除这是不必要的可能性,但我认为尝试一下会很有趣。

最佳答案

你不能在标准 C++ 中这样做,但 GCC 有 Labels as Values扩展名:

#include <iostream>

int main()
{
void *arr[3] = {&&label1, &&label2, &&label3};

int i;
for (i = 0; i < 3; i++)
{
goto *arr[i];
ret:;
}

// Prints `123`

return 0;

label1:
std::cout << 1;
goto ret;
label2:
std::cout << 2;
goto ret;
label3:
std::cout << 3;
goto ret;
}

在标准 C++ 中,您可以存储一个整数数组,然后使用 switch 根据这些整数选择操作。

或者,您可以尝试使用函数指针数组(甚至是 std::function)。

关于c++ - 使用数组作为 "goto"标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53735968/

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