5

我的环境是 Windows XP SP3 + 'Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86'。过程如下:

F:\workshop\vc8proj\console> 输入 tc

int main(void) {

    // Do some thing.
    {
        int i;
        {
            i = 3;
            goto abc111;
        }

        abc111:
    }
    return 0;
}

F:\workshop\vc8proj\console> cl /MD tc Microsoft (R) 32-bit C/C++ 优化编译器版本 14.00.50727.762 for 80x86

版权所有 (C) 微软公司。版权所有。

tc tc(10):错误 C2143:语法错误:缺少 ';' 前 '}'

F:\workshop\vc8proj\console>vim tc

F:\workshop\vc8proj\console>type tc

int main(void) {
    // Do some thing.
    {
        int i;
        {
            i = 3;
            goto abc111;
        }

        abc111: 5201314;
    }
    return 0;
}

F:\workshop\vc8proj\console> cl /MD tc Microsoft (R) 32-bit C/C++ 优化编译器版本 14.00.50727.762 for 80x86

版权所有 (C) 微软公司。版权所有。

tc Microsoft (R) 增量链接器版本 8.00.50727.762 版权所有 (C) Microsoft Corporation。版权所有。

/out:t.exe t.obj

F:\workshop\vc8proj\console>

Linux操作系统下也是一样的情况???

4

2 回答 2

11

It's a language feature. A label can only be part of a labeled statement, and the statement needs a terminating ;. Just putting a semicolon behind the label suffices.

int main(void) {

    // Do some thing.
    {
        int i;
        {
            i = 3;
            goto abc111;
        }

        abc111: ;

    }
    return 0;
}

works too.

于 2012-06-20T09:48:04.243 回答
1

嗯,这是一个语言特性。必须有一个我们提到标签的声明。

如果标签后没有任何声明,则只需放一个';' 终止语句,或者您可以仅在标签后编写返回语句。

于 2012-06-20T10:38:05.387 回答