Использование атрибута, упакованного для классов в GCC - PullRequest
0 голосов
/ 08 июня 2018

GCC docs говорит :

Вы можете указывать атрибут упакованного атрибута только в определении перечисления, структуры или объединения, но не в определении типа, которое также не определяетперечислимый тип, структура или объединение.

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

1 Ответ

0 голосов
/ 08 июня 2018

Я не смог четко найти ответ в документе GCC, но после следующих экспериментов кажется, что вы можете.

#include <iostream>


struct UnPackedStruct {
    unsigned char a;
    int b;
};

struct __attribute__ ((__packed__)) PackedStruct {
    unsigned char a;
    int b;
};

class __attribute__ ((__packed__)) PackedClass{
    unsigned char a;
    int b;
};

int main()
{
    std::cerr << "sizeof( UnPackedStruct ): " << sizeof(UnPackedStruct)
            << ", sizeof( PackedStruct ): " << sizeof(PackedStruct)
            << ", sizeof( PackedClass): " << sizeof(PackedClass)
            << "\n";

    return 0;
}

Вывод:

sizeof( UnPackedStruct ): 8, sizeof( PackedStruct ): 5, sizeof( PackedClass): 5

Попробуйте это с онлайн-компилятором

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...