Как стать автором
Обновить

02. Я уже даже не вижу код. Я вижу блондинку, брюнетку и рыжую

Время на прочтение25 мин
Количество просмотров8.8K
Всего голосов 15: ↑15 и ↓0+15
Комментарии9

Комментарии 9

так вот ты какая… цифровая археология)

Не люблю избыточный код
typedef struct(ushort val){
    if(ReadUShort(FTell()) != val){
        SetBackColor(cRed);
        Printf("0f:%04X const ushort (%04Xh) != %Xh\n", 
            FTell(), val, ReadUShort(FTell()));
    }
    ushort value;
}CONST_S<fgcolor=cWhite, bgcolor=cGray, hidden=true>;

Почему не
typedef struct(ushort val){
    ushort value;
    if(value != val){
        SetBackColor(cRed);
        Printf("0f:%04X const ushort (%04Xh) != %Xh\n", 
            FTell()-2, val, value);
    }
}CONST_S<fgcolor=cWhite, bgcolor=cGray, hidden=true>;

Никто не любит избыточный код, но любовь зла. Язык 010Editor очень похож на С, но является интерпретируемым, и выполняется построчно.
Как только интерпретатор проходит строку с объявлением переменной - всё, она уже в Variables и уже подсвечена в hex окне. Последующее задание цвета фона в следующей строке - оно будет действовать на последующие переменные (в рамках границ видимости, в данном случае - структуры).
А если есть желание менять фон переменной в зависимости от ее значения - то будь добр сначала прочитать место, где она будет, и только потом, определившись с цветом по значению - объявлять переменную.
Второй вариант - FSeek() назад на размер данных переменной и повторное её объявление при "ошибке", так, кстати, я тоже кое-где делал. Минус-появится вторая переменная в Variables с тем же именем после первой.(вернее, массив с этим именем из 2х элементов). И это еще терпимо - код ведь будет читабельнее, понятнее в Вашем примере.

Но главное contra - описание переменных через FSeek() ломает механизм синхронизации Variables и hex по <Ctrl>+<J>. Т.е. я не смогу прыгнуть в конкретный итем как раз в том случае, когда там произошла проблема.

ps: Спасибо за комментарий, не смотря на объём, я понимаю, что все равно будут очевидные для меня ситуации, но которые для читателей будут вовсе не очевидны. И я вовсе не претендую на абсолютную правильность - наверняка, могут бытьи ошибки и неоптимальные решения, здорово, когда на них указывают.

Спасибо за объяснение.
Можно попробовать так написать
ushort value <bgcolor=(this != val ? cRed : cNone )>;

Интерпретатор. Всё, что до ```;```, выполняется, как целое. Атрибутам не можно присвоить значениев. А возможные аттрибутивные функции жестко ограничены, на цвета не повоздействуешь:

Вообще, это я из мануала скопировал.
Возможно, у вас версия старая

Version 12.0 — September 17th, 2021
..The following is a list of all new features in version 12.0 of 010 Editor:
....Templates and Scripts
......fgcolor and bgcolor attributes can now be a function or expression.

//--- 010 Editor v11.0.1 Binary Template

Бинго!
Спасибо )

Всегда поражал реверсинжиниринг, особенно программно-аппаратный. Уважуха.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории