|
Доступ к полям структуры. |
|
|
|
Aug 30 2013, 11:41
|
Знающий
   
Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709

|
Переношу код из AVR Studio (WINAVR) в Keil. Компилятор выдаёт предупреждение на объявление, на стоку с "};" Код ……… struct { unsigned char Bit1 : 1; unsigned char Bit2 : 1; }; …………. ..\Test.h(37): warning: #40-D: expected an identifier И потом выдаёт ошибку на использование этих полей. Лечится это заданием имени структуры, например "} A1;", что не удобно, для меня. В WINAVR, в MinGW, в Visual Studio такого нет, только в Keil. Может быть это стандарт С++, не проверял и всех тонкостей языка не знаю. Можно какими-нибудь флажками убрать эту особенность?
|
|
|
|
|
 |
Ответов
|
Aug 30 2013, 18:26
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(Oleg_IT @ Aug 30 2013, 12:41)  Компилятор выдаёт предупреждение на объявление, на стоку с "};" Код ……… struct { unsigned char Bit1 : 1; unsigned char Bit2 : 1; }; …………. ..\Test.h(37): warning: #40-D: expected an identifier Код ……… struct mystruct_s { unsigned char Bit1 : 1; unsigned char Bit2 : 1; };
... struct mystruct_s variable_a, variable_b; ...
variable_a.Bit1 = variable_b.Bit2;
………….
|
|
|
|
|
Sep 1 2013, 06:35
|
Знающий
   
Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709

|
Цитата Приведите весь код, а то не понятно это внутри структуры, юниона или просто чистое объявление. Это заголовок IP Код typedef struct IP_Head_v4_tag { struct { unsigned char IHL : 4; // IHL - 5 unsigned char Version : 4; // Version - 4 };
struct { unsigned char Prec : 3; // Precedence - 3 unsigned char D : 1; // Delay Normal - 0 unsigned char T : 1; // Throughput Normal - 0 unsigned char R : 1; // Relibility Normal - 0 unsigned char Res1 : 2; // Reserved - 00 };
unsigned short TotalLen; // Total Length unsigned short Identif; // Идентификатор - 0
struct { unsigned short FragOffset: 13; // Fragment Offset - 0 unsigned char MF : 1; // Fragment - 0 = Last Fragment unsigned char DF : 1; // Fragment - 1 = Don't Fragment unsigned char Res2 : 1; // Reserved - 0 }; struct { unsigned char TTL : 8; // Time to Live < 1 unsigned char Prot : 8; // Protocol }; unsigned short Checksum; // Header Checksum IPADDRESS IP_SRC_Adr; // Source Address IPADDRESS IP_DST_Adr; // Destination Address } IP_Head_v4; Со всеми перечисленными компиляторами (WINAVR, MinGW, Visual Studio) анонимные битовые поля структур работают правильно. Цитата Для анонимных структур существует #pragma anon_unions. Спасибо, проверю, а вдруг поможет. Цитата Что-то я не понимаю, как эту структуру безымянную использовать. Например так Код IP_Head_v4 IP_H; IP_H.IHL = 5;
|
|
|
|
|
Sep 4 2013, 11:47
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(pitt @ Sep 3 2013, 15:54)  Просто хочу, как бывший советский гражданин, дать несколько советов. Когда имеете дело со структурами, особенно отображающими пакеты данных, не забывайте endianness(простите не знаю как по-русски). Кроме того, советую включать файл stdint.h и использовать типы int8_t, uint16_t и тому подобное- это существенно облегчает как понимание, так и переносимость кода. По-русски это будет эндианность  А я вообще не рекомендую мапить протоколы на структуры, потому как нарвался однажды на грабельное поле, и связано это было с выравниванием.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
Сообщений в этой теме
Oleg_IT Доступ к полям структуры. Aug 30 2013, 11:41 shmur Приведите весь код, а то не понятно это внутри стр... Aug 30 2013, 11:57 psL компилятору непонятно, как вы собираетесь использо... Aug 30 2013, 12:01 SlavaG можно попробовать так:
Кодstruct {
unsigned char... Aug 30 2013, 12:17 VAI Для анонимных структур существует #pragma anon_uni... Aug 30 2013, 12:22 MrYuran Что-то я не понимаю, как эту структуру безымянную ... Aug 30 2013, 12:22 A. Fig Lee typedef struct {
unsigned char Bit1 : 1;
... Aug 30 2013, 12:29 shmur Возможно у топик стартера было что -то вроде:
Кодu... Aug 30 2013, 13:02 vassabi Может я что-то не понимаю, но как вы в битовое пол... Aug 30 2013, 14:47 A. Fig Lee Цитата(vassabi @ Aug 30 2013, 10:47) Може... Aug 30 2013, 15:10 SSerge Цитата(vassabi @ Aug 30 2013, 21:47) Може... Aug 30 2013, 16:13 Палыч Цитата(vassabi @ Aug 30 2013, 18:47) Согл... Aug 30 2013, 16:34 vassabi Цитата("SSerge")Я правильно понял, что в... Aug 30 2013, 16:18   Oleg_IT Цитата(pitt @ Sep 3 2013, 16:54) Просто х... Sep 4 2013, 11:31    pitt Цитата(MrYuran @ Sep 4 2013, 07:47) А я в... Sep 4 2013, 20:42     aaarrr Цитата(pitt @ Sep 5 2013, 00:42) А вот эт... Sep 4 2013, 21:16     jcxz Цитата(pitt @ Sep 5 2013, 02:42) А вот эт... Sep 5 2013, 03:08    Oleg_IT Цитата(MrYuran @ Sep 4 2013, 15:47) По-ру... Sep 5 2013, 10:35     jcxz Цитата(Oleg_IT @ Sep 5 2013, 16:35) Я эту... Sep 5 2013, 11:30 Oleg_IT VAI спасибо, #pragma anon_unions помогла. Sep 2 2013, 08:56 alx.bilous И какой в этом вообще смысл?
чем это бы отличалос... Sep 4 2013, 12:32 pitt Практически каждый компилятор/процессор имеет своё... Sep 5 2013, 22:26
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|