这是编译器的错误还是C语言的特性?

5

我的环境是Windows XP SP3 +“Microsoft (R) 32位C / C ++优化编译器版本14.00.50727.762 for 80x86”。该过程如下:

F:\ workshop \ vc8proj \ console> type 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 微软32位C/C++优化编译器版本14.00.50727.762 for 80x86

版权所有(C) Microsoft Corporation.

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

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

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

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

        abc111: 5201314;
    }
    return 0;
}

在Windows操作系统中,使用Microsoft (R) 32-bit C/C++优化编译器版本14.00.50727.762对F:\workshop\vc8proj\console\t.c进行编译,并使用Microsoft (R) Incremental Linker Version 8.00.50727.762将t.obj链接成可执行文件t.exe。同样的,是否在Linux操作系统下也是相同情况?
2个回答

11

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

int main(void) {

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

        abc111: ;

    }
    return 0;
}

这也行。


1

这是一种语言特性。必须有一个语句来引用标签。

如果标签后面没有语句,只需加上 ';' 终止语句或者仅在标签后面写一个返回语句即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接