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).
Так мне кажется проще выходит, хотя придётся проверять ввод на принадлежность к цифрам и запятой, но без учёта регистра это шестнадцать быстрых проверок на И ...