реклама на сайте
подробности

 
 
> Выравнивание при доступе к полям структур в Code Composer Studio v. 3.3
rifch
сообщение Sep 4 2007, 12:47
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 178
Регистрация: 30-12-04
Из: Москва
Пользователь №: 1 762



Имеется следующий код на C++ для 6000-ков, который считывает некоторую структуру из бинарного файла. После загрузки данных при доступе к полям структуры выясняется, что они выравниваются на 4 байта.
Код
typedef unsigned short WORD; //16-bit
typedef unsigned int DWORD; //32-bit

//The BITMAPFILEHEADER structure contains information about the type, size, and layout of a file that contains a DIB.
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER, *PBITMAPFILEHEADER;

BITMAPFILEHEADER bmfh;

int O1=(char*)&bmfh.bfType-(char*)&bmfh;
int O2=(char*)&bmfh.bfSize-(char*)&bmfh;
int O3=sizeof(bmfh.bfType);
int O4=sizeof(WORD);
int O5=sizeof(BITMAPFILEHEADER);
int O6=sizeof(bmfh);

Значения смещений будут следующими:
O1==0
O2==4
O3==2
O4==2
O5==16
O6==16
По идее значение O2 должно быть равным 2, а O5 и O6 равными 14. Как сделать, чтобы выравнивание при доступе к элементам структуры было правильным?
Пробовал через команду препроцессора STRUCT_ALIGN например следующим образом:
Код
#pragma STRUCT_ALIGN(128);
typedef struct st_tag
{
int a;
short b;
} st_typedef;

но компилятор выдаёт предупреждение warning: unrecognized #pragma. Как быть в этой ситуации?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Harbour
сообщение Oct 26 2007, 05:59
Сообщение #2


Местами Гуру
*****

Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323



packed struct техас не поддерживает в принципе - говорят что этого нет в стандарте, на нужды людей им как обычно наплевать.
Go to the top of the page
 
+Quote Post
novichok_1
сообщение Dec 18 2007, 19:08
Сообщение #3





Группа: Новичок
Сообщений: 5
Регистрация: 18-12-07
Из: Azr
Пользователь №: 33 414



я думаю что это так

struct
{

int r;
int t;

} Name; /* имя структуры*/
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 15:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.02193 секунд с 7
ELECTRONIX ©2004-2016