XCode中的奇怪行为

时间:2013-04-17 12:14:35

标签: c syntax compiler-errors case-statement

我想回想一下,我记得在switch-case语句中禁止使用属性声明(即不允许case:ABC int i=0;

今天早上我发现了一些比较奇怪的东西,

以下编译

switch(var1) {
  case 1:
    NSLog(@"hello");
    float x = 0;
    view.setCenter(CGPointMake(x,100));
    break;
  ...

而以下 NOT 编译

switch(var1) {
  case 1:
    float x = 0;
    view.setCenter(CGPointMake(x,100));
    break;
  ...

因此,如果您使用语句(而非声明)启动case表达式,它就会编译。但是当你尝试使用变量声明立即开始时,它不会。

这背后的理由是什么?

编辑: 决定让我的问题更清楚, NSLog有什么区别以便现在编译?

2 个答案:

答案 0 :(得分:3)

NSLog在这里没有什么区别。正是;正在发挥作用:

switch(var1) {
    case 1:
        ;
        float x = 0;
        view.setCenter(CGPointMake(x,100));
        break;

编译。甚至

 switch(var1) {
    case 1:;
        float x = 0;
        view.setCenter(CGPointMake(x,100));
        break;

float之后不能编译的是:(或其他类型)。换句话说,在:之后,预期命令,而不是声明。

答案 1 :(得分:0)

如果您执行编译:

switch(var1) {
  case 1:
  {
    float x = 0;
    view.setCenter(CGPointMake(x,100));
  }
    break;

至于检查this answer的原因。