Is this a compiler bug, or a C language feature?
c, cl.exe, hyperlink, winapi
Solution
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.
Problem
My environment is Windows XP SP3 + 'Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86'. The process is as follows: 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 Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. t.c t.c(10) : error C2143: syntax error : missing ';' before '}' 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; } ``` F:\workshop\vc8proj\console> cl /MD t.c Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. t.c Microsoft (R) Incremental Linker Version 8.00.50727.762 Copyright (C) Microsoft Corporation. All rights reserved. /out:t.exe t.obj F:\workshop\vc8proj\console> Under the Linux operating system the same situation, too???