C++ 默认标签在switch语句中显然不起作用
我在相关帖子上看到了一些关于这个问题的答案,但并不是我问题的答案。这是我的密码:C++ 默认标签在switch语句中显然不起作用,c++,arduino,switch-statement,arduino-c++,C++,Arduino,Switch Statement,Arduino C++,我在相关帖子上看到了一些关于这个问题的答案,但并不是我问题的答案。这是我的密码: #include <VirtualWire.h> uint8_t RFbuff[VW_MAX_MESSAGE_LEN]; uint8_t RFbuflen = VW_MAX_MESSAGE_LEN; const int REMOTE = 0; String remoteScriptName(){ String scriptName; switch(REMOTE){ case 1
#include <VirtualWire.h>
uint8_t RFbuff[VW_MAX_MESSAGE_LEN];
uint8_t RFbuflen = VW_MAX_MESSAGE_LEN;
const int REMOTE = 0;
String remoteScriptName(){
String scriptName;
switch(REMOTE){
case 1:
vw_get_message(RFbuff, &RFbuflen);
String RFSTRBUFF = RFbuff;
scriptName = RFSTRBUFF;
delay(1200);
break;
default:
scriptName = "script";
delay(500);
}
return(scriptName);
}
void setup() {
pinMode(LED_BUILTIN, HIGH);
switch(REMOTE){
case 1:
vw_set_rx_pin(8);
vw_setup(2000);
vw_rx_start();
break;
default:
digitalWrite(LED_BUILTIN, LOW);
delay(500);
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
digitalWrite(LED_BUILTIN, HIGH);
}
}
void loop(){}
#包括
uint8_t RFbuff[大众最大消息长度];
uint8\u t RFbuflen=VW\u最大消息长度;
远程常数int=0;
字符串remoteScriptName(){
字符串脚本名;
开关(远程){
案例1:
vw_获取_消息(RFbuff和RFbuflen);
字符串RFSTRBUFF=RFbuff;
scriptName=RFSTRBUFF;
延迟(1200);
打破
违约:
scriptName=“script”;
延迟(500);
}
返回(脚本名称);
}
无效设置(){
pinMode(内置LED灯,高电平);
开关(远程){
案例1:
vw_设置_接收_引脚(8);
大众汽车公司成立(2000年);
vw_接收_启动();
打破
违约:
数码写入(LED内置,低电平);
延迟(500);
数码写入(LED内置,高);
延迟(500);
数码写入(LED内置,低电平);
延迟(500);
数码写入(LED内置,高);
}
}
void loop(){}
在switch(REMOTE)
的remoteScriptName()
函数中,有大小写:
和默认值:
。当我将代码上传到Arduino micro时,它会跳过开关(远程)
中的默认值。
但是在void setup
中,我有相同的switch语句,但是在这种情况下(上传代码后),它确实执行默认值:
我对switch()
没有太多经验,所以任何推荐都很受欢迎 范围可能不够,因此请尝试每种情况
//..
case 1:{
vw_get_message(RFbuff, &RFbuflen);
String RFSTRBUFF = RFbuff;
scriptName = RFSTRBUFF;
delay(1200);
}
break;
default:
scriptName = "script";
delay(500);
}
//...
你的问题促使我提供一份带有存根的代码副本
在Lubuntu 18.10上开发
使用g++(Ubuntu 9.2.1-9ubuntu2)9.2.1 20191008
执行输出(存根),包括posix时间测量
pinMode(11,10)
digitalWrite (11,5)
digitalWrite (11,10)
digitalWrite (11,5)
digitalWrite (11,10)
F838_t::exec() duration 2,000,584,200 ns (201703)
Compilation finished at Sat Dec 28 11:06:06
如果只有一个选项,那么if else可能会有所帮助?只是为了确保,您知道只有案例
或默认
部分中的一个将被正确执行?它不像控件在默认情况下到达default
主体…您确定这是您正在执行的实际代码吗?您是否曾经尝试过在这里简化它,并在这个过程中剥离出实际的违规代码?您如何知道哪个部件正在运行?内存(特别是REMOTE
的值)会被程序中其他地方的错误损坏吗?您如何知道默认情况会被跳过?如果是,那么return(scriptName)
返回什么?此代码不编译。看见仅供参考-我使用“存根”帮助在我的桌面上为桌面编译此代码。启用了错误和警告的编译器可以报告a)“错误:跳转到大小写标签”和b)“注意:交叉初始化'std::string RFSTRBUFF'”将大括号添加到switch语句修复了这些问题。可能还有其他错误。
time make CC='g++ $(m) -O0 ' dumy838 ; ./dumy838
>>>cvs-tools/lmbm/src800/Makefile.i686
R_exe: dumy838.cc
rm -f dumy838
g++ -std=c++17 -m64 -ggdb -O3 -Wall -Wextra -Wshadow -pedantic -Werror=vla
-Wcast-align -Wcast-qual -Wconversion -Wsign-conversion -Wsign-compare
-Wsign-promo -Wpointer-arith -Wunused -Wold-style-cast -Woverloaded-virtual
-Wsequence-point -Wdelete-incomplete -Wmaybe-uninitialized
-Wmisleading-indentation -Wunreachable-code -Wnon-virtual-dtor
-MMD -MP -O0 dumy838.cc -o dumy838
-L../../bag/src -lbag_i686 -lrt -pthread -lncurses -lgmpxx -lgmp
real 0m1.506s
user 0m1.289s
sys 0m0.181s
pinMode(11,10)
digitalWrite (11,5)
digitalWrite (11,10)
digitalWrite (11,5)
digitalWrite (11,10)
F838_t::exec() duration 2,000,584,200 ns (201703)
Compilation finished at Sat Dec 28 11:06:06