我在这段代码中遇到了编译错误:
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之前的预期表达式”为什么?
谢谢!
答案 0 :(得分:16)
Switch语句不会引入新的范围。更重要的是,根据C语言规范,常规语句必须遵循case语句 - 不允许变量声明。您可以在变量声明之前放置;
,编译器会接受它,但您定义的变量将在switch的父级范围内,这意味着您无法在另一个case语句中重新声明该变量。
通常,当一个人在case语句中定义变量时,会为case语句引入一个新的范围,如
switch(event) {
case kCFStreamEventHasBytesAvailable: {
// do stuff here
break;
}
case ...
}