【问题标题】:Expected Expression before ... In Switch Statement [duplicate]之前的预期表达式...在 Switch 语句中 [重复]
【发布时间】:2011-07-07 00:34: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 之前的预期表达式”为什么?

谢谢!

【问题讨论】:

标签: objective-c c


【解决方案1】:

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

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

switch(event) {
    case kCFStreamEventHasBytesAvailable: {
        // do stuff here
        break;
    }
    case ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2016-07-24
    相关资源
    最近更新 更多