информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медЗа кого нас держат?Атака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
да я уже понел в чём суть 19.11.04 18:33  Число просмотров: 1730
Автор: Tamas Статус: Member
<"чистая" ссылка>
<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.

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




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach