c - 在从未更改的枚举上切换大小写

标签 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;
}

最佳答案

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

它的编写方式非常出人意料,通常您会看到这是使用预处理器和 #if Defined 来选择一个代码路径完成的。

前两行可以澄清为:

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

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

关于c - 在从未更改的枚举上切换大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21458623/

相关文章:

c - 在 win32api 中直接读写硬盘,如 biosdisk 或 ms-dos 中的 absread

java - Android:将编辑文本字段链接到按钮

javascript - Coffeescript:在 switch 语句中出现意外

swift - 如何在 Swift 中展开可选的 while 模式匹配?

c - 数学函数不适用于 C 中的 "make"

c - 指向整数数组的指针的标量初始值设定项的多余元素

c - 在 2D 矩阵中使用 malloc 和 realloc 时出现问题

c - C编译器Web服务

java - 适当使用Java中的Multi-level Break

JavaScript Switch 语句 - 可能用例值?