Здравствуйте! Подскажите пожалуйста, как правильно объявить структуру? Первым элементом структуры хочу сделать текстовый идентификатор, но при компиляции получаю сообщение об ошибке: Код (Text): error A2181: initializer must be a string or single item Если первый элемент объявить просто как одиночный байт, dw или dd тогда всё ОК. Что в этом случае тогда обозначает "...must be a string" и как сделать правильно? Вот сам пример структуры с ошибкой: Код (Text): MYSTRUCT STRUCT szSign db 12 dup(?) ;Text signature nVers db ? ;File version MYSTRUCT ENDS
Quantum Спасибо, всё работает, но появился такой вопрос: Структура заполняется во время работы программы потому объявляю её в секции неинициализированных данных. Здесь работает первый нижепреведенный вариант, второй нет. Не могли бы Вы подсказать в чём между ними разница: Вариант 1 Код (Text): .data? test1 MYSTRUCT <> Вариант 2 Код (Text): .data? test1 MYSTRUCT <?>
netROCK Первый вариант заполняет всю структуру значением по умолчанию. Это значение всегда ноль. В секции .DATA? (BSS) это значение соответствует '?', но т.к. BSS всегда на старте заполняется нулями, то ? == 0. Второй вариант пытается присвоить ? первому полю структуры, но первое поле (это поле szSign) содержит массив из 12 байт и компилятор не понимает как можно присвоить ? массиву. Поэтому он ругается. Ещё варианты: Код (Text): test1 MYSTRUCT <"] test1 MYSTRUCT <''> test1 MYSTRUCT <"",?> test1 MYSTRUCT <'',?> Во всех 4х вариантах компилятор выдаст необоснованный варнинг, если структура инициализируется в секции .DATA? (он не улавливает, что строка в кавычках пустая), но всё равно правильно создаст объектник. Из всего этого можно заключить, что самый правильный вариант - первый, т.е. <>