是编译器错误还是c语言功能?

时间:2012-06-20 09:45:06

标签: c winapi hyperlink cl.exe

我的环境是windows xp sp3 +'Microsoft(R)32位C / C ++优化编译器版本14.00.50727.762(适用于80x86'),流程如下:

  

F:\ workshop \ vc8proj \ console>输入t.c

int main(void) {
        // do some thing.
        {
                int i;
                {
                        i = 3;
                        goto abc111;
                }
abc111:
        }
        return 0;
}
  

F:\ workshop \ vc8proj \ console> cl / MD t.c Microsoft(R)32位C / C ++   针对80x86优化编译器版本14.00.50727.762

     

版权所有(C)Microsoft Corporation。保留所有权利。

     

t.c t.c(10):错误C2143:语法错误:缺少';'在'}'之前

     

F:\ workshop \ vc8proj \ console> vim t.c

     

F:\ workshop \ vc8proj \ console>输入t.c

int main(void) {
        // do some thing.
        {
                int i;
                {
                        i = 3;
                        goto abc111;
                }
abc111: 5201314;
        }
        return 0;
}
  

F:\ workshop \ vc8proj \ console> cl / MD t.c Microsoft(R)32位C / C ++   针对80x86优化编译器版本14.00.50727.762

     

版权所有(C)Microsoft Corporation。保留所有权利。

     

t.c Microsoft(R)增量链接器版本8.00.50727.762版权所有   (C)Microsoft Corporation。保留所有权利。

     

/out:t.exe t.obj

     

F:\车间\ vc8proj \控制台>

在Linux操作系统下同样的情况呢???

2 个答案:

答案 0 :(得分:10)

这是一种语言功能。标签只能是标记语句的一部分,并且该语句需要终止;。只需在标签后面加一个分号即可。

int main(void) {
        // do some thing.
        {
                int i;
                {
                        i = 3;
                        goto abc111;
                }
abc111: ;
        }
        return 0;
}

也有效。

答案 1 :(得分:1)

这是语言功能。必须有一份我们提到的声明标签。

如果标签后没有声明,那么只需输入';'终止语句,或者只能在标签后写回复语句。