|
Инициализация структур, Как сделать инициализацию до выполнения программы по именам полей? |
|
|
|
Nov 25 2015, 14:30
|

Местный
  
Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634

|
Добрый день  Есть такая проблема при разработке программ: пишешь, пишешь, а потом надо вдруг добавить какое-то поле к структуре. И если например: Код typedef struct { int Number; float Value; } Struct1; вдруг поменялось на Код typedef struct { float Percent; int Number; float Value; } Struct1; то все структуры инициализированные Код Struct1 structElement = { 1, 0.56 }; будут совсем даже неправильно заполненными. То что в дополнительном поле, которое появилось, будет 0 меня не интересует, это допустимо Т.е. получается только инициализация отдельно по полям? И никаких структур-констант, если хочешь чтобы все было четко по полям? Код void SetStruct1 ( void ) { structElement.Number = 1; structElement.Value = 0.56; }
Сообщение отредактировал kolobochishe - Nov 25 2015, 14:32
|
|
|
|
|
Nov 25 2015, 14:56
|

Местный
  
Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634

|
Цитата(aaarrr @ Nov 25 2015, 19:48)  Если компилятор поддерживает C99, то можно делать так: Код Struct1 structElement = { .Number = 1, .Value = 0.56 }  Отлично! Все нормально, VisualDSP 5.1 поддерживает.
|
|
|
|
|
Nov 27 2015, 07:09
|

Профессионал
    
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877

|
Цитата(psL @ Nov 26 2015, 11:23)  C++ 11 разве не умеет? Тот, что в стандарте - нет. Вот тут http://stackoverflow.com/questions/6181715...-initialisation тему обсуждали со всех возможных сторон. Красивого решения, к сожалению, не нашли... PS а вообще, надо б в эклипс написать feature request, чтоб в парсере кода добавили поддержку, и пользоваться вариантом из C99 в коде С++. Один фиг gcc это умеет, а задачей "писать код под все компиляторы разом" я не заморачивался; подозреваю, там будет куда больше проблем, чем эти структуры. Вот, кстати, в процессе нашёл интересное описание расширений gcc: https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Dec 9 2015, 16:37
|
Местный
  
Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102

|
Прошу прощения за небольшой оффтоп, не хочется новую тему создавать. Наверное, глупый вопрос, но точный ответ на него нигде не нашел. Если сравнивать по быстродействию, будет ли отличие, если я меняю значение переменной (или массива) и меняю значение элемента структуры? Грубо, говоря, вот это выполняется за одинаковое количество тактов? Код buff[0] =1; и Код Struct.buff[0] =1;
|
|
|
|
|
Dec 9 2015, 17:02
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (Atlantis- @ Dec 9 2015, 18:37)  Если сравнивать по быстродействию, будет ли отличие, если я меняю значение переменной (или массива) и меняю значение элемента структуры? Либо АБСОЛЮТНО одинаково, либо работа со структурой дает выигрыш в общем случае, когда рядом идет работа и с другими элеменами этой структуры. Исключения могут только быть, по понятной причине, при работе с пакованной структурой.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|