我在
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; }
我从来没有见过这个“三点”的构造(case’0’…’9′:)在C之前.它是一种有效的标准C语言吗?还是那种预处理魔法?这里发生了什么?