ERROR 17: Unknown label !!!ПОМОГИТЕ!!!

----------------------------------------------------- Nico_sh (nico_sh@.....ru) 22:05:54 11.12.2002 ----------------------------------------------------- Помогите пожайлуста!!! Выдаёт " ERROR 17: Unknown label " при компиляции!!! Незнаю что делать!!! ----------------------------------------------------- DOVG (expico@.........ru) 02:03:58 14.12.2002 ----------------------------------------------------- Ссылка на метку, которой нет. ----------------------------------------------------- Shaos (shaos@.....ru) 19:38:14 16.12.2002 ----------------------------------------------------- > Помогите пожайлуста!!! Выдаёт " ERROR 17: Unknown label " Во-первых, убедитесь, что у вас новая версия компилятора (не та, что в "Игромании"), если новая, но ошибка есть и имя метки что-то типа _L15, то присылайте мне своего робота, я его полечу, а вместе с ним и свой компилятор :) ----------------------------------------------------- Shaos (shaos@.....ru) 09:45:35 19.12.2002 ----------------------------------------------------- Вот что пишут в rwar@yahoogroups.com: Слегка этот спам уже запарил. Либо жди, пока Shaos соблаговолит почекать баги в компиляторе, либо читай сюда: 1)Откомпили робота с созданием препроцессорного файла(ключ "-p"). Дальше открываешь your_bot.rw! и поиском находишь вызов несуществующей метки. Дальше, ориентируясь на препроцессорный текст, правишь исходник следующим образом: 2) ВСЕ рядом стоящие(а, лучше, по всему роботу) с местом ошибки if-ы "закрой" else-ами ОБЯЗАТЕЛЬНО снабженными открывающимися-закр. фигурными скобками. Пример: Было: if(expr) { bla-bla-bla... } Должно стать: if(expr) { bla-bla-bla... } else { } В сам элз что-нибудь писать не обязательно. Главное, чтобы он был(со скобочками!). 3)Снабди вообще все if-ы, else-ы и прочие while-ы откр. закр. скобками. Не забывай про сдвиг уровней операторов - здорово облегчает жизнь. 4)Если не помогло 1-3, попробуй немного перекомпоновать место ошибки. Обычно это какие-нибудь сложные места и даже если их точно не удасться упростить, то переписать чуть по другому можно всегда. Таким макаром ВСЕ попдавшиеся мне подобные ошибки я исправил(и не только себе). Simon P.S. Добавлю от себя что баги пытаюсь убирать, если какие то остаются - то пожалуйста присылайте примеры! Иначе как же я их подчищу? :) ----------------------------------------------------- can (can@.......ru) 17:55:36 08.01.2003 ----------------------------------------------------- у меня тоже выдает " ERROR 17: Unknown label [0]" хотя точно "Unknown label"*ов у меня нет - проверил на 3 раза P.S. предыдущее сообщение написаное Shaos*ом 09:45:35 19.12.2002 я прочитал все if*ы закрыл else - не помогло ЧТО ДЕЛАТЬ? может есть еще какие_то способы? ----------------------------------------------------- Shaos (shaos@.....ru) 18:15:32 08.01.2003 ----------------------------------------------------- > у меня тоже выдает " ERROR 17: Unknown label [0]" > ... > ЧТО ДЕЛАТЬ? может есть еще какие_то способы? Самый лучший и безотказный способ - прислать исходник мне, а я жу найду место где там собака порылась ;) ----------------------------------------------------- Vital (lahin@......mtcnet.ru) 07:35:04 09.01.2003 ----------------------------------------------------- Хороший подход к программированию :) А если все будут слать каждую свою ошибку? Не проще ли выдавать номер ошибочной строки в программе (как во всех нормальных компиляторах)? Или это так сложно сделать? ----------------------------------------------------- can (nan@.......ru) 08:16:18 09.01.2003 ----------------------------------------------------- Хороший подход к программированию :) А если все будут слать каждую свою ошибку? Не проще ли выдавать номер ошибочной строки в программе (как во всех нормальных компиляторах)? Или это так сложно сделать? Vital - это наезд?! ----------------------------------------------------- Shaos (shaos@.....ru) 10:05:18 09.01.2003 ----------------------------------------------------- Vital (lahin@kuszn.mtcnet.ru) 07:35:04 09.01.2003 >Хороший подход к программированию :) >А если все будут слать каждую свою ошибку? >Не проще ли выдавать номер ошибочной строки в >программе (как во всех нормальных компиляторах)? >Или это так сложно сделать? Поверьте мне, так оно и сделано :) Но не для меток, нагенеренных препроцессором! Дополнительные переменные появляются после препроцессора. Если человек никогда не писал на Си, то у него возникает масса проблем - например молодые люди пишут: if(a=n) вместо if(a==n) или if(a>0) : label { какой-то код, непонятно зачем } Мне и в страшных снах не могло привидится, что люди могут такое писать - естественно я не мог заточить компилятор на выявление ВСЕХ ошибок, связанных с незнанием синтаксиса. Видимо придется учить компилятор выявлять и такие вещи... ----------------------------------------------------- Shaos (shaos@.....ru) 10:22:19 09.01.2003 ----------------------------------------------------- Еще несколько ошибок последнего времени: if(D>1) right;step else { act left if(D>1) left;step } надо: if(D>1) { right;step } else { act left if(D>1) { left;step } } или вот еще: if(D>=4) { call step4 act back } else call walkright надо: else call walkright Все это не выявляется компилятором, а приводит к ошибке Unknown Label, потому что препроцессор запутался со скобками и сгенерировал вызов метки, которую не поставил ----------------------------------------------------- Vital (lahin@......mtcnet.ru) 07:58:23 10.01.2003 ----------------------------------------------------- В Си и в Паскале если запускать программу из редактора, при ошибке она выдает номер строки. Я точно не знаю как это реализовано, наверно там есть какой то промежуточный код с сылками на исходник, который и выполняется. Либо кода нет, но программа работает как интерпритатор. Может кто знает, как там это реализовано? ----------------------------------------------------- Vital (lahin@......mtcnet.ru) 08:07:50 10.01.2003 ----------------------------------------------------- А вот еще способ получить строку с ошибкой: при ошибке в коде компилируем еще раз исходник и смотрим какая строка в исходнике сопоставляется с местом ошибке в коде. Действительно, реализовать это (номер строки с ошибкой) не просто получается. ----------------------------------------------------- Shaos (shaos@.....ru) 11:51:38 10.01.2003 ----------------------------------------------------- > В Си и в Паскале если запускать программу из редактора, > при ошибке она выдает номер строки. У меня ТОЧНО ТАКЖЕ!!! Разве вы не сталкивались с тем, что ошибки в Си и Паскале бывают на уровне ассемблера - тогда НИКАКОГО номера строки не пишется - только ошибка... Вот и у меня - для ошибок уровня текста номер строки пишется и редактор даже курсор ставит на ошибочную строку, но вот ошибки типа Unknown Label появляются на уровне промежуточного текста, где нумерация строк уже сбита (возможно я это смогу как-нибудь решить в следующих версиях). ----------------------------------------------------- Dam[N]eD (ImageSE@....ru) 18:49:11 12.03.2003 ----------------------------------------------------- У меня после каждой перезагрузки появляется ERROR 17: Unknown label , причём даже на уже готовых и работающих роботах ! ----------------------------------------------------- Shaos (shaos@.....ru) 19:29:33 17.03.2003 ----------------------------------------------------- > У меня после каждой перезагрузки появляется ERROR 17: Unknown label внимательнее пиши код - если совсем непонятно где глюки - присылай - объясню ----------------------------------------------------- Dam[N]eD (ImageSE@....ru) 19:44:57 21.03.2003 ----------------------------------------------------- Это уже на готовых роботах - даже на твоих (mouse и т.д)