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

 
 
> Incomplete arrays at end of structs - почему не работают?, IAR howto
Сергей Борщ
сообщение Feb 23 2007, 14:22
Сообщение #1


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Читаю описание компилятора:
Цитата
The last element of a struct may be an incomplete array. This is useful because one chunk of memory can be allocated for the struct itself and for the array, regardless of the size of the array.
Вроде все понятно и логично. Беру пример из того же описания:
Код
struct str
{
  char a;
  unsigned long b[];
};
Компилю. Error[Pe070]: incomplete type is not allowed.

Режимы ставил и Embedded C++ и Extended Embedded C++ и галка "Allow IAR extentions" стоит.
Компилятор версии 4.30A, но и мануал от него(This guide applies to version 4.x of ARM IAR Embedded Workbench®).
Что же делать???


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vertexodessa
сообщение Oct 29 2013, 17:15
Сообщение #2





Группа: Новичок
Сообщений: 2
Регистрация: 1-06-10
Пользователь №: 57 685



Ребята, а как же в режиме C++ объявить структуру такого типа:
Код
typedef struct udp_packet {
    u16 from_port;
    u16 to_port;
    u16 len;
    u16 cksum;
    u8 data[];
} udp_packet_t;

или

Код
// IP-пакет
typedef struct ip_packet {
    u8 ver_head_len; // версия и длина заголовка =0x45
    u8 tos; //тип сервиса
    u16 total_len; //длина всего пакета
    u16 fragment_id; //идентификатор фрагмента
    u16 flags_framgent_offset; //смещение фрагмента
    u8 ttl; //TTL
    u8 protocol; //код протокола
    u16 cksum; //контрольная сумма заголовка
    u32 from_addr; //IP-адрес отправителя
    u32 to_addr; //IP-адрес получателя
    u8 data[];
} ip_packet_t;

??


Или как по другому удобно работать с протоколом ip-udp, например?
В Си это решается просто:

Код
char buffer[256];
ip_packet_t* ip = buffer;
udp_packet_t *udp = ip->data;
strcpy(udp->data, "test");


как в С++ написать подобный код?
UPD:
блин... туплю... ничего же не мешает мне объявить хоть data[1000000000] в описании, всё равно же память под неё не выделяется, если использовать как указатель

Сообщение отредактировал vertexodessa - Oct 29 2013, 17:15
Go to the top of the page
 
+Quote Post



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

 


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


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