【发布时间】:2011-08-12 17:11:37
【问题描述】:
我在 DRBD 软件 (user/drbdtool_common.c) 的开源代码文件中注意到了这一点
const char* shell_escape(const char* s)
{
/* ugly static buffer. so what. */
static char buffer[1024];
char *c = buffer;
if (s == NULL)
return s;
while (*s) {
if (buffer + sizeof(buffer) < c+2)
break;
switch(*s) {
/* set of 'clean' characters */
case '%': case '+': case '-': case '.': case '/':
case '0' ... '9':
case ':': case '=': case '@':
case 'A' ... 'Z':
case '_':
case 'a' ... 'z':
break;
/* escape everything else */
default:
*c++ = '\\';
}
*c++ = *s++;
}
*c = '\0';
return buffer;
}
我以前从未在 C 语言中见过这种“三点”结构 (case '0' ... '9':)。它是一种有效的标准 C 语言吗?或者这是某种预处理器魔法?这里发生了什么?
【问题讨论】:
-
对于感兴趣的人,它是D programming language中的标准配置
-
clang 也支持 FWIW。
标签: c switch-statement