Re: gcc bug?
> ----------
> | flags |
> |--------|
> | length |
> |--------|
> | data |
> | .... |
> ----------
>
> struct pkt
> {
> uint32_t flags;
> uint32_t length;
> char data[0]; // data[1] для старых компиляторов
> };
>
>
> struct pkt* create_pkt( size_t data_length )
> {
> struct pkt* pkt =
> (struct pkt*) malloc( sizeof(struct pkt) + data_length );
>
> if (pkt != NULL)
> {
> pkt->flags = PKT_NODELAY;
> pkt->length = data_length;
> memset( pkt->data, 0, data_length );
> pkt->data[4] = 'r';
> pkt->data[5] = 't';
> pkt->data[6] = 'f';
> pkt->data[7] = 'm';
> }
>
> returm pkt;
> }
>
>
> Код непереносим, поскольку sizeof(struct pkt) будет давать разные
> значения даже для разных версий gcc, но здесь мы не об этом.
>
> Разумеется, это можно сделать и другими способами, но эстетическое
> чувство программистов вынуждает их желать работать с данными пакета
> обращаясь к члену структуры (так код лучше выглядит), а не извращаясь с
> указателями и кастами struct в char.
>
> До "изобретения" массивов с нулевой длиной приходилось пользоваться
> массивами с единичной длиной.
это ужасно!
я начинаю понимать отчего так много глючных программ на свете :-\
Reply to:
- References:
- Re: gcc bug?
- From: "Dmitry E. Oboukhov" <dimka@avanto.org>
- Re: gcc bug?
- From: "Dmitry A. Fedorov" <D.A.Fedorov@inp.nsk.su>