Перейти к содержанию
    

Инициализация структур

Я для контроля ошибок в таких случаях (когда меняется набор полей структуры) добавляю последним поле, инициализированное например указателем на символ - "label" - часто помогает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разумеется. А еще лучше перейти на C++ и завернуть в класс.

А нельзя еще в структуре константы прописать? Размер буфера и маску?

Структура в памяти линейно располагается, а если в ней объявить константу с ключевым словом const ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А нельзя еще в структуре константы прописать? Размер буфера и маску?

Структура в памяти линейно располагается, а если в ней объявить константу с ключевым словом const ?

 

Конечно можно! Вот так, например:

struct TMyStruct
{
static const uint32 Const1 = 12;

//-- interger "constants" only
enum TSome
{
EItem1 = 0,
EItem2 = 13,
};

};

 

Компилятор, правда, нужен правильный :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Конечно можно! Вот так, например:

struct TMyStruct
{
static const uint32 Const1 = 12;

//-- interger "constants" only
enum TSome
{
EItem1 = 0,
EItem2 = 13,
};

};

 

Компилятор, правда, нужен правильный :)

и как оно будет выглядеть в памяти? Исходя из того что элементы структуры в памяти должна быть расположены линейно. А static const это другой тип памяти, если не ошибаюсь.

Keil - "правильный" компилятор?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и как оно будет выглядеть в памяти? Исходя из того что элементы структуры в памяти должна быть расположены линейно. А static const это другой тип памяти, если не ошибаюсь.

Keil - "правильный" компилятор?

 

Если целочисленные константы заданы через enum, то они никак не будут выглядеть в памяти.

static const член структуры тоже, скорее всего ничего в памяти занимать не будет, компилятор его сократит просто до целочисленной константы, если, конечно, не страдать фигней и не пытаться брать адрес такой константы..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще-то в С++ есть четко прописанные требования к standard layout классам(структурам). Тогда будет точно известно как оно лежит в памяти.

А еще есть требования к POD структурам, это те которые совсем простые и известно как в памяти и разрешено копировать через memcpy.

Такие вещи надо учитывать. Сейчас на вскидку не скажу, что там по поводу static members(кажется они идут мимо кассы и в sizeof(структура) не учитываются. Т.е. в памяти структуры не занимают ничего), но само объявление enum точно ничего не занимает. Занимать будет поле структуры с типом TSome. И размер будет == sizeof(int). В C++11 можно задать underlaying type и тогда может быть и не как int а как char например. Оч удобно для embedded однако.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...