VictorVG2
| Редактировать | Цитировать | Сообщить модератору b4553 r13841 (b4552 или b4553 ) - сбой при сборке в VC++ 2010 на файле viewer.cpp при сборке 32-х и 64-х битных вариантов Far: Цитата: 1>viewer.cpp(4064): error C3493: "RB_PRC" нельзя передать неявно, поскольку не задан режим передачи по умолчанию 1>viewer.cpp(4069): error C3493: "RB_HEX" нельзя передать неявно, поскольку не задан режим передачи по умолчанию 1>viewer.cpp(4075): error C3493: "RB_DEC" нельзя передать неявно, поскольку не задан режим передачи по умолчанию 1>viewer.cpp(4100): error C2064: результатом вычисления фрагмента не является функция, принимающая 5 аргументов 1>viewer.cpp(4105): error C2064: результатом вычисления фрагмента не является функция, принимающая 5 аргументов 1>Построение проекта ".\fardev\unicode_far\far.vcxproj" завершено (целевые объекты build) с ошибкой. СБОЙ построения. | в VC++2015 собралось без вопросов. Вопрос о номере билда возник отсюда - changelog: Цитата: drkns 19.02.2016 00:08:34 +0200 - build 4552 1. Еще раз на тему Alt+F8 во вьювере: | в vbuild.m4 видим: Цитата: m4_define(BUILD,4553)m4_dnl | отсюда и вопрос какой билд, хотя я думаю что в /unicode_far/vbuild.m4 случайная опечатка от чего никто из нас не застрахован. Добавлено: Поглядел по месту - по коду сбой возникает вот где: Цитата: InputMode = RB_PRC; <-- стр. 4064 } // он умный - hex код ввел! else if (!StrCmpNI(&Str[Pos], L"0x", 2) || Str[Pos] == L'$' || Str.find_first_of(L"Hh", Pos) != string::npos) { InputMode = RB_HEX; <-- стр. 4069 if (Str[Pos] == L'$') ++Pos; } else if (Str.find_first_of(L"Mm", Pos) != string::npos) { InputMode = RB_DEC; <-- стр. 4075 } | похоже что компилятор в данном случае ведёт себя подобно первым версиям IBM PL/1L из OS/360 - в подобном случае тот путался с тип входных данных данных и заранее выдавал ошибку т.к. встречал неопределённость, а дальше т.к. произошёл сбой в строках 4064, 4069, 4075 по цепочке происходит сбой и в строках 4100/4105 ведь компилятор уже зафиксировал неопределённость и вызвал обработчик ошибок. И тут я вижу только один вариант их избежать - алгоритм типа такого: модификатор первые два символа, проверяем его на значения %, R, L, + и - любые иные считаем ошибкой, его в переменную которая послужит нам семафором для ветвления, всё остальное в поле цифры, проверяем если там значения 0-9, a-f и или при модификаторе % третий символ запятая проверяем что ввод содержит только допустимые цифры, нет - ругаемся, да - считаем адрес перехода и goto. При этом нам не требуется отдельный модификатор DEC/HEX - режим определит ввод, а тип перехода - абсолютный от начала файла или относительный по смещению от строки - ну к примеру модификатор R, + - переход по смещению вперёд, L, "-" - аналогично, но назад, + и - указывают на относительное смещение, точка отсчёта текущая строка, R и L задают отсчёт от начала (R), или конца файла (L). Так мне кажется проще выходит, хотя придётся проверять ввод на принадлежность к цифрам и запятой, но без учёта регистра это шестнадцать быстрых проверок на И ... | Отправлено: 02:10 19-02-2016 | Исправлено: VictorVG2, 03:29 19-02-2016 |
|