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

 
 
 
Reply to this topicStart new topic
YuryD
сообщение Oct 5 2007, 10:20
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 3-08-05
Пользователь №: 7 322



Господа!
Я просмотрел архив, но так и нашел понятного ответа, как взять адрес члена структуры, чтобы, при этом, не появлялся warning "use of address of unaligned structure member". Пример:

typedef struct _task
{
long data1[TOTAL_ID][4];
int data2;
int data3;
} TASK;

TASK task;

Теперь делаю операцию:

long *test = &task.data1[0][0];

И получаю указанный выше warning. Есть способ избавиться от него?
Спасибо.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 5 2007, 10:36
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(YuryD @ Oct 5 2007, 13:20) *
И получаю указанный выше warning. Есть способ избавиться от него?

В данном конкретном случае или не использовать @pragma pack для этой структуры , ибо паковать для 32bit там просто нечего(даже если и есть чего, то во многих случаях скорость важнее), либо давить конкретный warning @pragma diag_suppress=


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 5 2007, 13:50
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



#pragma pack(4)
TASK task;
#pragma pack()

long *test = (long *)&task.data1[0][0];
Go to the top of the page
 
+Quote Post
YuryD
сообщение Oct 5 2007, 14:14
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 3-08-05
Пользователь №: 7 322



Спасибо. Заработало. Я разобрался. В одном из header я обьявил для структуры #pragma pack(1), а #pragma pack() после обьявления не сделал. И, видимо, все дальнейшие структуры данных компилятор честно упаковывал. Указание #pragma pack() сняло эту проблему.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 5 2007, 15:05
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(rezident @ Oct 5 2007, 16:50) *
#pragma pack(4)
TASK task;
#pragma pack()

Только #pragma pack к описаниию структуры относится и спокойнее pragma c push/pop или чем-то аналогичным использовать, а не восстанавливать по умолчанию.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


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


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