C++ 使用GCC开关外壳范围,是否可以构造范围为[a-Za-z]的单个外壳?

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(); 打破 } 显然,这是伪代码,

这个问题很直截了当。 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”:{
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;
}