关于C#:在Switch语句之前的预期表达式

Expected Expression before … In Switch Statement

本问题已经有最佳答案,请猛点这里访问。

我在这段代码中收到一个编译错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
switch(event) {
    case kCFStreamEventHasBytesAvailable:
        UInt8 buf[BUFSIZE];
        CFIndex bytesRead = CFReadStreamRead(stream, buf, BUFSIZE);
        if (bytesRead > 0) {
            handleBytes(buf, bytesRead);
        }
        break;
    case kCFStreamEventErrorOccurred:
        NSLog(@"A Read Stream Error Has Occurred!");
    case kCFStreamEventEndEncountered:
        NSLog(@"A Read Stream Event End!");
    default:
        break;
}

UInt8 buf[BUFSIZE];导致编译器抱怨"uint8之前的预期表达式",为什么?

谢谢!


switch语句不引入新的作用域。此外,根据C语言规范,常规语句必须跟在case语句之后-不允许使用变量声明。您可以将;放在变量声明之前,编译器会接受它,但您定义的变量将在开关父级的范围内,这意味着您不能在另一个case语句中重新声明该变量。

通常,当定义case语句中的变量时,会为case语句引入一个新的范围,如

1
2
3
4
5
6
7
switch(event) {
    case kCFStreamEventHasBytesAvailable: {
        // do stuff here
        break;
    }
    case ...
}