在永不更改的枚举上切换大小写

时间:2014-01-30 14:04:44

标签: c switch-statement

我遇到了以下代码,似乎无法理解这里发生了什么。 枚举pattern永远不会改变,为什么要switch呢?

enum pattern { PAT_ZERO, PAT_SEQ, PAT_PIPE };
static enum pattern pattern;

static ssize_t fill_in_buf(struct thread *ignore, void *buf, size_t nbytes)
{
    size_t i;
    __u8 *p;

    (void)ignore;

    switch (pattern) {
    case PAT_ZERO:
        printf("fill_in_buf PAT_ZERO\n");
        memset(buf, 0, nbytes);
        break;

    case PAT_SEQ:
        printf("fill_in_buf PAT_SEQ\n");
        for (p = buf, i = 0; i < nbytes; ++i, ++p)
            *p = i % 63;
        break;

    case PAT_PIPE:
        printf("fill_in_buf PAT_PIPE\n");
        return fread(buf, 1, nbytes, stdin);
    }

    return nbytes;
}

1 个答案:

答案 0 :(得分:0)

它看起来像测试/调试代码,程序员想要几个品种可供选择。

编写起来非常出乎意料,通常您会看到预处理器和#if defined选择一个代码路径。

可以澄清两个第一行:

static const enum { PAT_ZERO, PAT_SEQ, PAT_PIPE } pattern = PAT_ZERO;

因为引入枚举的名称或使变量非const没有意义。