在Switch语句之前的预期表达式

Nic*_*ick 8 c objective-c

我在这段代码中遇到了编译错误:

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;
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Lil*_*ard 16

Switch语句不会引入新的范围.更重要的是,根据C语言规范,常规语句必须遵循case语句 - 不允许变量声明.您可以;在变量声明之前放置一个,并且编译器会接受它,但是您定义的变量将位于switch的父变量范围内,这意味着您无法在另一个case语句中重新声明该变量.

通常,当在case语句中定义变量时,会为case语句引入一个新的作用域,如

switch(event) {
    case kCFStreamEventHasBytesAvailable: {
        // do stuff here
        break;
    }
    case ...
}
Run Code Online (Sandbox Code Playgroud)