我遇到了以下代码,但似乎无法理解这里发生了什么。
枚举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/