отмена выравнивния в структуре

Тема в разделе "LANGS.C", создана пользователем mmshvedko, 9 янв 2009.

  1. mmshvedko

    mmshvedko New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2005
    Сообщения:
    23
    Подскажите есть такая возможность отменить вырвнивание в структуре

    struct name
    {
    char Type[2];
    int Size;
    short Reserved_1;
    short Reserved_2;
    int Offset;
    ...
    } bmfh;

    , чтобы элементы в памяти располагались друг за другом "впритирочку" ?
     
  2. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Код (Text):
    1. #pragma pack (push, 1)
    2.  
    3. struct name
    4. {
    5. ...
    6. } bmfh;
    7.  
    8. #pragma pack (pop)
     
  3. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    Код (Text):
    1. #pragma pack( push, 1 )
    2.  struct  name
    3. {
    4.     ....
    5. } bmfh;
    6. #pragma pack( pop )
    :-( Опоздал.
     
  4. mmshvedko

    mmshvedko New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2005
    Сообщения:
    23
    Если я правильно понимаю это специфичные директивы( pack,startup...),но для конкретной реализации чего ?
    для PC(bcc)-работает,
    PDA(pgcc)-их игнорирует
     
  5. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    mmshvedko
    в стандарте С нет конструкций для задания/отмены выравнивания, но у многих компиляторов есть расширения для этих целей. В большинстве компиляторов (MSVC, Borland, Digital Mars и др.) выравнивание задается прагмой pack. В gcc (по крайней мере для i386) для этого есть __attribute__ (( packed )), хотя он поддерживает и прагму pack в целях совместимости. В Sun C, наскока я знаю, не работают оба метода.
    Вобщем, тебе следует посмотреть документацию к компилятору, который ты используешь.
     
  6. mmshvedko

    mmshvedko New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2005
    Сообщения:
    23
    Да __attribute__ (( packed )) на pgcc работает - Спасибо.