ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
30 июня
49273 Топик полностью
Alex03 (25.01.2006 00:28, просмотров: 1) ответил Беня на Кто может просветить по вопросу выбора компилятора языка Си для ARM
По GCC (GCC 3.4.4) на примере CW1.5 с дефолтными опциями ПЕРВОЕ sizeof(float) - 4 sizeof(double) - 8 sizeof(long double) - 8 ВТОРОЕ В GCC вообще #pragma pack() есть, НО! на #pragma pack(push, 1) получаем варнинг:
#pragma pack(push[, id], ) is not supported on this target
на #pragma pack(1) варнинга нет, но похоже он не пашет! :(
struct A
{
    uchar u1;
    uchar u2;
    uchar u3;
    uchar u4;
};

#pragma pack(1)

struct B
{
    uchar u1;
    uchar u2;
    uchar u3;
    uchar u4;
};
sizeof(struct A) - 4 sizeof(struct B) - 4 Тут ничего необычного ибо пример исходный такой :) Изменяем структуру
#pragma pack(1)
struct C 
{
    uchar u;
    int i;
};

struct D
{
    struct C a[5];
    int i;
};
sizeof(struct C) - 8 sizeof(struct D) - 44 Оба! От #pragma pack(1) ожидается совсем другое! В общем после всего этого я пользовался __attribute__ ((__packed__))
struct __attribute__ ((__packed__)) C 
{
    uchar u;
    int i;
};

struct __attribute__ ((__packed__)) D
{
    struct C a[5];
    int i;
};
sizeof(struct C) - 5 sizeof(struct D) - 29 Видимо можно ещё и __attribute__ ((aligned (X))) совместно с pack пользовать