Смешения в структурах C++

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by fire64, 11 Jul 2011.

  1. fire64

    fire64 Elder - Старейшина

    Joined:
    1 Apr 2008
    Messages:
    251
    Likes Received:
    22
    Reputations:
    5
    Скажем, есть структура:

    PHP:
    struct datahdr_t
    {
        
    byte    id[2];
        
    byte    type;

        
    int        firstcounter;
        
    int        secondcounter;

    };
    Объясните, почему firstcounter имеет смещение 4, а secondcounter соответственно 8

    Ведь перед firstcounter идет 3 члена по 8 бит, которые должны занимать 3 байта, а не 4.

    И как сделать структуру, что бы firstcounter имел смещение 3, а secondcounter 7 байт
     
  2. Catbert

    Catbert Banned

    Joined:
    29 Jun 2010
    Messages:
    80
    Likes Received:
    27
    Reputations:
    10
    Перед структурой добавь #pragma pack(push, 1), после #pragma pack(pop, 1)
     
    1 person likes this.
  3. fire64

    fire64 Elder - Старейшина

    Joined:
    1 Apr 2008
    Messages:
    251
    Likes Received:
    22
    Reputations:
    5
    Спасибо, помогло.
     
  4. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    #include <pshpack1.h>
    ...
    #include <poppack.h>