GenaSPB 11 9 декабря, 2015 Опубликовано 9 декабря, 2015 · Жалоба Я для контроля ошибок в таких случаях (когда меняется набор полей структуры) добавляю последним поле, инициализированное например указателем на символ - "label" - часто помогает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dima1060 0 10 декабря, 2015 Опубликовано 10 декабря, 2015 · Жалоба Разумеется. А еще лучше перейти на C++ и завернуть в класс. А нельзя еще в структуре константы прописать? Размер буфера и маску? Структура в памяти линейно располагается, а если в ней объявить константу с ключевым словом const ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CrimsonPig 0 10 декабря, 2015 Опубликовано 10 декабря, 2015 · Жалоба А нельзя еще в структуре константы прописать? Размер буфера и маску? Структура в памяти линейно располагается, а если в ней объявить константу с ключевым словом const ? Конечно можно! Вот так, например: struct TMyStruct { static const uint32 Const1 = 12; //-- interger "constants" only enum TSome { EItem1 = 0, EItem2 = 13, }; }; Компилятор, правда, нужен правильный :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dima1060 0 10 декабря, 2015 Опубликовано 10 декабря, 2015 · Жалоба Конечно можно! Вот так, например: struct TMyStruct { static const uint32 Const1 = 12; //-- interger "constants" only enum TSome { EItem1 = 0, EItem2 = 13, }; }; Компилятор, правда, нужен правильный :) и как оно будет выглядеть в памяти? Исходя из того что элементы структуры в памяти должна быть расположены линейно. А static const это другой тип памяти, если не ошибаюсь. Keil - "правильный" компилятор? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CrimsonPig 0 10 декабря, 2015 Опубликовано 10 декабря, 2015 · Жалоба и как оно будет выглядеть в памяти? Исходя из того что элементы структуры в памяти должна быть расположены линейно. А static const это другой тип памяти, если не ошибаюсь. Keil - "правильный" компилятор? Если целочисленные константы заданы через enum, то они никак не будут выглядеть в памяти. static const член структуры тоже, скорее всего ничего в памяти занимать не будет, компилятор его сократит просто до целочисленной константы, если, конечно, не страдать фигней и не пытаться брать адрес такой константы.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 10 декабря, 2015 Опубликовано 10 декабря, 2015 · Жалоба Вообще-то в С++ есть четко прописанные требования к standard layout классам(структурам). Тогда будет точно известно как оно лежит в памяти. А еще есть требования к POD структурам, это те которые совсем простые и известно как в памяти и разрешено копировать через memcpy. Такие вещи надо учитывать. Сейчас на вскидку не скажу, что там по поводу static members(кажется они идут мимо кассы и в sizeof(структура) не учитываются. Т.е. в памяти структуры не занимают ничего), но само объявление enum точно ничего не занимает. Занимать будет поле структуры с типом TSome. И размер будет == sizeof(int). В C++11 можно задать underlaying type и тогда может быть и не как int а как char например. Оч удобно для embedded однако. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться