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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Инициализация структур, Как сделать инициализацию до выполнения программы по именам полей?
Genadi Zawidowsk...
сообщение Dec 9 2015, 23:46
Сообщение #16


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Я для контроля ошибок в таких случаях (когда меняется набор полей структуры) добавляю последним поле, инициализированное например указателем на символ - "label" - часто помогает.
Go to the top of the page
 
+Quote Post
Atlantis-
сообщение Dec 10 2015, 12:12
Сообщение #17


Местный
***

Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102



Цитата(Сергей Борщ @ Dec 10 2015, 00:43) *
Разумеется. А еще лучше перейти на C++ и завернуть в класс.

А нельзя еще в структуре константы прописать? Размер буфера и маску?
Структура в памяти линейно располагается, а если в ней объявить константу с ключевым словом const ?
Go to the top of the page
 
+Quote Post
CrimsonPig
сообщение Dec 10 2015, 12:27
Сообщение #18


Местный
***

Группа: Участник
Сообщений: 329
Регистрация: 23-04-14
Пользователь №: 81 502



Цитата(Atlantis- @ Dec 10 2015, 12:12) *
А нельзя еще в структуре константы прописать? Размер буфера и маску?
Структура в памяти линейно располагается, а если в ней объявить константу с ключевым словом const ?


Конечно можно! Вот так, например:
CODE
struct TMyStruct
{
static const uint32 Const1 = 12;

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

};


Компилятор, правда, нужен правильный sm.gif
Go to the top of the page
 
+Quote Post
Atlantis-
сообщение Dec 10 2015, 13:09
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102



Цитата(CrimsonPig @ Dec 10 2015, 15:27) *
Конечно можно! Вот так, например:
CODE
struct TMyStruct
{
static const uint32 Const1 = 12;

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

};


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

и как оно будет выглядеть в памяти? Исходя из того что элементы структуры в памяти должна быть расположены линейно. А static const это другой тип памяти, если не ошибаюсь.
Keil - "правильный" компилятор?
Go to the top of the page
 
+Quote Post
CrimsonPig
сообщение Dec 10 2015, 13:46
Сообщение #20


Местный
***

Группа: Участник
Сообщений: 329
Регистрация: 23-04-14
Пользователь №: 81 502



Цитата(Atlantis- @ Dec 10 2015, 13:09) *
и как оно будет выглядеть в памяти? Исходя из того что элементы структуры в памяти должна быть расположены линейно. А static const это другой тип памяти, если не ошибаюсь.
Keil - "правильный" компилятор?


Если целочисленные константы заданы через enum, то они никак не будут выглядеть в памяти.
static const член структуры тоже, скорее всего ничего в памяти занимать не будет, компилятор его сократит просто до целочисленной константы, если, конечно, не страдать фигней и не пытаться брать адрес такой константы..
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Dec 10 2015, 20:52
Сообщение #21


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



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


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 2nd September 2025 - 03:04
Рейтинг@Mail.ru


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