使用GCC开关案例范围,是否可以构建范围为[A-Za-z]的单个案例?

秋娃

非常简单的问题。GCC的Case范围可进行以下操作:

switch (c.toLatin1()) {
default: {
    foo();
    break;
} case 'A' ... 'Z': { 
    bar();
    break;
} case 'a' ... 'z': {
    bar();
    break;
}

https://gcc.gnu.org/onlinedocs/gcc/Case-Ranges.html

但是,这里的问题bar()是多余的,并且'A' ... 'z'最终将包含许多不需要的字符:

在此处输入图片说明

从概念上讲,是否可能出现以下情况?

switch (c.toLatin1()) {
default: {
    foo();
    break;
} case 'A' ... 'Z' || 'a' ... 'z': { 
    bar();
    break;
}

显然,这是伪代码,但是您知道了。如果需要的话,解决方案可以包括文本宏。我更担心意外引入错误,因为我忘记添加新代码:

switch (c.toLatin1()) {
default: {
    foo();
    break;
} case 'A' ... 'Z': { 
    foo(); // I add here
    bar();
    break;
} case 'a' ... 'z': {
    bar(); // but forget to add it here too.
    break;
}

因为那两种情况,实际上都是一种情况。谢谢。

保罗·埃文斯

从概念上讲,是否可能出现以下情况?

switch (c.toLatin1()) {
default: {
    foo();
    break;
} case 'A' ... 'Z' || 'a' ... 'z': { 
    bar();
    break;
}

当然,只要写:

switch (c.toLatin1()) {
default: {
    foo();
    break;
} case 'A' ... 'Z':
  case 'a' ... 'z': { 
    bar();
    break;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章