2012-06-20 2 views
4

Моя среда является Windows XP SP3 + 'Microsoft (R) 32-битный C/C++ оптимизирующий компилятор версии 14.00.50727.762 для 80x86', процесс выглядит следующим образом:Является ошибкой компилятора или c языковыми функциями?

F: \ мастерская \ vc8proj \ консоли> Тип дц

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

F: \ мастерская \ vc8proj \ консоль> кл/MD дц Microsoft (R) 32-битный C/C++ оптимизирующий компилятор версии 14.00.50727.762 для 80x86

Авторское право (C) Корпорация Microsoft. Все права защищены.

t.c t.c (10): ошибка C2143: синтаксическая ошибка: отсутствует ';' до того '}'

F: \ мастерская \ vc8proj \ консоли> ВИМ дц

F: \ мастерская \ vc8proj \ консоли> Тип дц

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

F: \ мастерская \ vc8proj \ console> cl/MD tc Microsoft (R) 32-разрядный C/C++ Оптимизация компилятора Версия 14.00.50727.762 для 80x86

Авторское право (C) Корпорация Microsoft. Все права защищены.

t.c Microsoft (R) инкрементный компоновщик версии 8.00.50727.762 Авторское право (C) Корпорация Microsoft. Все права защищены.

/out:t.exe t.obj

F: \ мастерская \ vc8proj \ консоли>

под управлением операционной системы Linux такая же ситуация, тоже ???

ответ

10

Это особенность языка. Метка может быть только частью с надписью, а оператору требуется завершение ;. Достаточно просто положить точку с запятой.

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

также работает.

1

Ну, это язык. Обязательно должно быть заявление, на которое мы упоминали лейбл.

Если после метки нет инструкции, просто поставьте ';' для завершения инструкции или вы можете написать оператор возврата только после маркировки.

Смежные вопросы