【发布时间】:2014-02-22 21:09:45
【问题描述】:
我遇到了以下代码,但似乎无法理解这里发生了什么。
枚举 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;
}
【问题讨论】:
-
pattern是否被其他函数更改了? -
@GrijeshChauhan 为什么会这样?枚举模式!= 模式
-
@tzippy:因为其他地方的一些代码改变了
pattern的值? -
pattern必须在此处未显示的代码中使用。
标签: c switch-statement