在我的开关中,我希望案例从 0 变为 ( number_of_cases-1
),而无需自己编写数字。这样如果我在中间删除一个 case 块,以下 case 会重新编号(减 1),从而再次从 ( 0..caseNo-1
) 切换。
像这样(当然它不会编译,因为i++
不知道编译时间):
#include <iostream>
#define ALWAYS_SECOND_CASE 1
void nop(char c){}
int main()
{
int i=0;
int var=ALWAYS_SECOND_CASE;
switch(var)
{
case i++: //case 0:
nop('x');
break;
case i++: //case 1:
nop('y')
break;
case i++: //case 2:
nop('z')
break;
}
//case 1 should have been switched to, nop('y') called.
}
现在我删除了中间情况,并且不写任何内容,最后一个情况应该从情况 2 更改为情况 1:
#include <iostream>
#define ALWAYS_SECOND_CASE 1
void nop(char c){}
int main()
{
int i=0;
int var=ALWAYS_SECOND_CASE;
switch(var)
{
case i++: //case 0:
nop('x');
break;
case i++: //case 1: instead of case 2 like before
nop('z')
break;
}
//case 1 should have been switched to, nop('z') called,
// instead of nop('y') like before.
}
所以我不能使用变量,因为它们太可变了;那么符号常数太恒定了,我可以做SYMC+1
,但是不行SYMC++
。那么也许是枚举,或者一些不错的宏函数?
编辑感谢 if-else 提示,我只是认为由于 case 值在编译时是已知的,因此使用 switch 会更好。
并指定我想要做什么:我有一个菜单char[rows][cols]={"first line","second line"}
。我想将 switch case 映射到行,这样如果我想从菜单中删除一行(减少行号之后的行),我将只删除程序其余部分中的一个 case。