Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| |
#pragma-ы уж очень компиляторно-зависимы 19.11.04 11:30 Число просмотров: 1871
Автор: amirul <Serge> Статус: The Elderman
|
> #pragma pack(push, 1) Сомневаюсь, что в lcc будет работать
|
<programming>
|
[C++] sizeof struct Lcc-Win32 интересный прикол !!! 19.11.04 04:51
Автор: Tamas Статус: Member
|
и так что у нас по идеи делает sizeof ???
по идеи он возвращяет размер обекта в байтах это как я понимаю ?
пример
Lcc-Win32
unsigned char a;
printf("%d\n",sizeof(a)); //возвращяет 1
а теперь так
typedef struct
{
unsigned char a;
unsigned long b;
}A;
A a;
printf("%d\n",sizeof(a)); //возвращяет 8
printf("%d\n",sizeof(a.a)); //возвращяет 1
printf("%d\n",sizeof(a.b)); //возвращяет 4
и как это вобще понимать ??? я уже не говорю про битные поля сними вобще косяк получается
|
|
Это выравнивание поля a по границе 4-х байт 19.11.04 11:21
Автор: lunc <Alexander Krizhanovsky> Статус: Member
|
|
| |
да я уже понел в чём суть 19.11.04 18:33
Автор: Tamas Статус: Member
|
|
|
почитай про выравнивание структур 19.11.04 05:08
Автор: Killer{R} <Dmitry> Статус: Elderman Отредактировано 19.11.04 05:13 Количество правок: 1
|
И сделай вот так:
#pragma pack(push, 1)
typedef struct
{
unsigned char a;
unsigned long b;
}A;
A a;
#pragma pack(pop)
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(a.a));
printf("%d\n",sizeof(a.b));
|
| |
#pragma-ы уж очень компиляторно-зависимы 19.11.04 11:30
Автор: amirul <Serge> Статус: The Elderman
|
> #pragma pack(push, 1) Сомневаюсь, что в lcc будет работать
|
| | |
#pragma pack(push, 1) в Lcc Работает и gcc тоже 19.11.04 18:32
Автор: Tamas Статус: Member
|
|
| | |
Ну значит гдето в опциях компилятора. Хотя сомневаюсь что не... 19.11.04 11:33
Автор: Killer{R} <Dmitry> Статус: Elderman
|
> > #pragma pack(push, 1) > Сомневаюсь, что в lcc будет работать Ну значит гдето в опциях компилятора. Хотя сомневаюсь что не будет возможности менять выравниваение прямо в коде - нехорошо ведь ради какой нить структуры требуемой функцией из внешней длл отключать выравнивание по всему проекту...
|
| | | |
Выравнивание скорее всего есть 19.11.04 11:52
Автор: amirul <Serge> Статус: The Elderman
|
> Ну значит гдето в опциях компилятора. Хотя сомневаюсь что > не будет возможности менять выравниваение прямо в коде - > нехорошо ведь ради какой нить структуры требуемой функцией > из внешней длл отключать выравнивание по всему проекту... Скорее всего даже прагмой, но синтаксис этой прагмы не стандартизирован и используется для расширений. Так что, кто как хочет, тот так и использует. Также вполне возможно (довольно частая практика), что lcc перенял синтаксис какого либо другого компилятора. Будь то gcc и MSVC. Просто для совместимости по исходникам с тем же MSVC.
Замечание я свое сделал не столько потому, что уверен, что работать не будет, сколько для того, чтобы человек не пугался, если вдруг не заработает.
|
|
|