Как правильно объявить структуру?

Тема в разделе "WASM.BEGINNERS", создана пользователем netROCK, 23 апр 2006.

  1. netROCK

    netROCK New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2004
    Сообщения:
    5
    Здравствуйте! Подскажите пожалуйста, как правильно объявить структуру? Первым элементом структуры хочу сделать текстовый идентификатор, но при компиляции получаю сообщение об ошибке:
    Код (Text):
    1.  
    2. error A2181: initializer must be a string or single item
    3.  




    Если первый элемент объявить просто как одиночный байт, dw или dd тогда всё ОК. Что в этом случае тогда обозначает "...must be a string" и как сделать правильно? Вот сам пример структуры с ошибкой:
    Код (Text):
    1.  
    2. MYSTRUCT STRUCT
    3.    szSign db 12 dup(?) ;Text signature
    4.    nVers  db ?         ;File version
    5. MYSTRUCT ENDS
    6.  
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    netROCK


    Код (Text):
    1. .DATA
    2.  
    3. test1 MYSTRUCT < "123", 5 >


    Никакой ошибки.
     
  3. netROCK

    netROCK New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2004
    Сообщения:
    5
    Quantum

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

    Вариант 1
    Код (Text):
    1.  
    2. .data?
    3.  test1 MYSTRUCT <>
    4.  




    Вариант 2
    Код (Text):
    1.  
    2. .data?
    3.  test1 MYSTRUCT <?>
    4.  
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    netROCK



    Первый вариант заполняет всю структуру значением по умолчанию. Это значение всегда ноль. В секции .DATA? (BSS) это значение соответствует '?', но т.к. BSS всегда на старте заполняется нулями, то ? == 0.



    Второй вариант пытается присвоить ? первому полю структуры, но первое поле (это поле szSign) содержит массив из 12 байт и компилятор не понимает как можно присвоить ? массиву. Поэтому он ругается.



    Ещё варианты:
    Код (Text):
    1. test1 MYSTRUCT <"]
    2. test1 MYSTRUCT <''>
    3. test1 MYSTRUCT <"",?>
    4. test1 MYSTRUCT <'',?>


    Во всех 4х вариантах компилятор выдаст необоснованный варнинг, если структура инициализируется в секции .DATA? (он не улавливает, что строка в кавычках пустая), но всё равно правильно создаст объектник.



    Из всего этого можно заключить, что самый правильный вариант - первый, т.е. <>
     
  5. netROCK

    netROCK New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2004
    Сообщения:
    5
    Quantum

    Теперь всё понятно. Спасибо большое за развёрнутый ответ.