Как на C++ оформить данные в .const

Тема в разделе "WASM.WIN32", создана пользователем Pele, 31 июл 2006.

  1. Pele

    Pele New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2006
    Сообщения:
    7
    в masm32 это бы выглядело так:

    .const
    var db 123

    как оформить то же самое на с++, чтобы данные были в секции констант в ехе файле ?
     
  2. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    static char var = 123
    или объявить var как глобальную переменную
    еще для VC есть #pragma data_seg("") см. в MSDN
     
  3. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    nobodyzzz
    Любой нормальный компилятор поместит такую переменную в .DATA, а не в .CONST. VC может помещать константы в .RDATA.
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    С каких это пор static стал константой? const char var = 123 объявляет константу, а где расположит - зависит от реализации компилятора, имхо.
     
  5. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    да затупилс про const забыл=)))
     
  6. drmist

    drmist New Member

    Публикаций:
    0
    Регистрация:
    31 май 2005
    Сообщения:
    112
    А что за секция такая .const? первый раз слышу. может просто написать
    // ...
    #pragma comment(linker, "/MERGE:.data=.const")
    // ...
    const int Alpha = 123;
    // ...
     
  7. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    drmist
    Секция для данных read-only. Обычно называется rdata.
     
  8. Iceberg

    Iceberg New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    54
    Адрес:
    Санкт-Петербург
    Pele
    const static char var = 0x666;

    указывая static в данном случае задаем область видимости переменной. В пределах одного модуля.
     
  9. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    это линкер(link.exe by MS) хитрит на самом деле. Просто он объединяет [merge] const данные c импортом.
     
  10. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Но ведь секция импорта должна быть доступна на запись, не так ли? Или лоадер сам модифицирует её?
     
  11. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Ну на самом деле, мне кажется;), лоадеру по барабану... Запишет и всё тут
     
  12. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    asmfan
    Есть rdata - константы. Есть idata - импорт. Есть ещё edata - экспорт. MS link.exe обьединяет все 3 в одну секцию.

    IceStudent
    Лоадер в неё всё равно ухитрится записать.