下面是开关语句的代码:
switch(pin)
{
case 1:
break;
case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11:
case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20:
case 21: case 22: case 23: case 24:case 25:case 26:case 27:case 28:case 29: case 30: case 31:
case 32: case 33: case 34: case 35:
dataOut[pin-2] = 1;
DAQmxWriteDigitalLines(taskHandleOut,1,1,10.0,DAQmx_Val_GroupByChannel,dataOut,NULL,NULL);
break;
default:
break;在上面的例子中,2-35将被分组,我的意思是,当pin等于2-35时,将执行特定的任务。
我想知道上面的代码是否有效。我还没有在开关语句中看到案例分组。任何类似的多案例分组的网页链接将不胜感激。也许有更好的方法来做到这一点,而不是分组多个案例。
发布于 2019-02-12 16:27:57
虽然您的案例可能更好地服务于if-check if (pin >= 2 && pin <= 35),但是像这样分组案例标签是很常见的。
gcc/clang/tinycc甚至还有语法糖:
switch(pin){
case 2 ... 35: /*nonstandard GNU extension; note well the whitespace*/
};发布于 2019-02-12 16:22:46
是的,这很好,虽然我会写
if (pin >= 2 && pin <= 35){
dataOut[pin-2] = 1;
DAQmxWriteDigitalLines( ...
}我要是你的话。如果您只使用gcc作为您的编译器,那么也可以使用案例范围。
发布于 2019-02-12 16:23:40
它是有效的。它被称为 will ,这也是为什么您必须将breaks分隔为cases的原因,也就是说,如果您不使用break,那么您的情况下的指令无论如何都会被执行。就像在
int i = 1;
switch(i) {
case 1:
cout<<1<<endl;
case 2:
cout<<"nope!\n";
}这将输出
1
nope!因为在break之前没有case 2:。
但在你的情况下,你也可以
if (pin >= 2 && pin <= 35) {
dataOut[pin-2] = 1;
DAQmxWriteDigitalLines(taskHandleOut,1,1,10.0,DAQmx_Val_GroupByChannel,dataOut,NULL,NULL);
}https://stackoverflow.com/questions/54654454
复制相似问题