C++ 使用GCC开关外壳范围,是否可以构造范围为[a-Za-z]的单个外壳?
这个问题很直截了当。 GCC的案例范围允许以下情况:C++ 使用GCC开关外壳范围,是否可以构造范围为[a-Za-z]的单个外壳?,c++,qt,gcc,duplicates,switch-statement,C++,Qt,Gcc,Duplicates,Switch Statement,这个问题很直截了当。 GCC的案例范围允许以下情况: 开关(c.toLatin1()){ 默认值:{ foo(); 打破 }案例“A”…“Z”:{ bar(); 打破 }案例“a”…“z”:{ bar(); 打破 } 然而,这里的问题是,bar()是冗余的,'A'…'z'最终将包含一堆不需要的字符: 从概念上讲,像下面这样的事情是可能的吗 开关(c.toLatin1()){ 默认值:{ foo(); 打破 }案例“A”…“Z”|“A”…“Z”: bar(); 打破 } 显然,这是伪代码,
开关(c.toLatin1()){
默认值:{
foo();
打破
}案例“A”…“Z”:{
bar();
打破
}案例“a”…“z”:{
bar();
打破
}
然而,这里的问题是,bar()
是冗余的,'A'…'z'
最终将包含一堆不需要的字符:
从概念上讲,像下面这样的事情是可能的吗
开关(c.toLatin1()){
默认值:{
foo();
打破
}案例“A”…“Z”|“A”…“Z”:
bar();
打破
}
显然,这是伪代码,但你明白了。
如果需要,解决方案可以包括文本宏。我更担心意外引入错误,因为我忘记添加新代码:
开关(c.toLatin1()){
默认值:{
foo();
打破
}案例“A”…“Z”:{
foo();//我在这里添加
bar();
打破
}案例“a”…“z”:{
bar();//但是也忘了在这里添加它。
打破
}
因为这两种情况实际上是一种情况。
谢谢
从概念上讲,像下面这样的事情是可能的吗
当然,只要写:
switch (c.toLatin1()) {
default: {
foo();
break;
} case 'A' ... 'Z':
case 'a' ... 'z': {
bar();
break;
}
请注意,
'A'-'Z'
不能保证是连续的,例如与EBCDIC。@Jarod42您的意思是,'A''''Z'
?另外,您可以扩展EBCDIC吗?如果它是一个平台的东西,我可以定义一个保证连续行为的文本宏吗?范围A..Z在包含中。对此的补充,我去了ahead并定义了一个文本宏:#define case_字母case'a'…'z':case'a'…'z':
,效果很好。
switch (c.toLatin1()) {
default: {
foo();
break;
} case 'A' ... 'Z':
case 'a' ... 'z': {
bar();
break;
}