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

 
 
 
Reply to this topicStart new topic
> KEIL Выборочная инициализация массива в структуре
vlad_new
сообщение Jun 10 2012, 17:18
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Порылся в инете, примеров много разных, но KEIL упорно на все ругается.
Есть возможность проинициализировать отдельный массив в структуре?
Надо заполнить константами Key.alt[].

struct _key
{
vu16 pin[20];
vu8 alt[5];
vu8 off[20];
vu32 flag_100;
};

struct _key Key;
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Jun 10 2012, 18:13
Сообщение #2


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

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



Если это на стеке - заполняйте memcpy (или присваивнием ко всем пяти элементам).
Если это инициализируемый до main - вы ничего не потеряете, если пропишите инициализацию всех элементов.

Сообщение отредактировал Genadi Zawidowski - Jun 10 2012, 18:20
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jun 10 2012, 18:49
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Так можно:
Код
struct _key
{
vu16 pin[20];
vu8  alt[5];
vu8  off[20];
vu32 flag_100;
struct _key(vu8 init_value) {
    alt[0]=init_value;
    .....
}
  
  };
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Jun 11 2012, 09:18
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(vlad_new @ Jun 10 2012, 19:18) *
Надо заполнить константами Key.alt[].

struct _key
{
vu16 pin[20];
vu8 alt[5];
vu8 off[20];
vu32 flag_100;
};

struct _key Key;



Код
struct _key Key = {{0}, {1,2,3,4,5}, {0}, {0}};

Go to the top of the page
 
+Quote Post
vlad_new
сообщение Jun 12 2012, 01:43
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Получилось. Всем спасибо.
Go to the top of the page
 
+Quote Post
sla000
сообщение Jun 13 2012, 02:31
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 25-06-07
Из: Томск
Пользователь №: 28 670



Цитата(vlad_new @ Jun 12 2012, 08:43) *
Получилось. Всем спасибо.


Еще варианты:

Код
struct _key Key = {.alt = {0, 1, 2},};
struct _key Key2 = {alt : {0, 1, 2},};



Второй вариант может не прокатить, вроде это расширение для GCC.
Go to the top of the page
 
+Quote Post
vlad_new
сообщение Jun 13 2012, 04:50
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Не. так не выходит. Это я уже пробывал. Так может прокатить только в С++, а в СИ приходится все элементы перечислять.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 13 2012, 07:00
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (vlad_new @ Jun 13 2012, 07:50) *
Так может прокатить только в С++, а в СИ приходится все элементы перечислять.
Как раз наоборот - в Си первый вариант легален, в С++ - нет. Второй вообще не встречал.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 13 2012, 07:29
Сообщение #9


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



2tc: Добавьте опцию компиляции --C99 в поле misk control на вкладке с/c++ и тогда можно будет инитить поля структур по имени.
Цитата(Сергей Борщ @ Jun 13 2012, 10:00) *
Второй вообще не встречал.
Аналогично.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
sla000
сообщение Jun 13 2012, 10:13
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 25-06-07
Из: Томск
Пользователь №: 28 670



http://gcc.gnu.org/onlinedocs/gcc-4.6.3/gc...esignated-Inits

Another syntax which has the same meaning, obsolete since GCC 2.5, is `fieldname:', as shown here:

Код
struct point p = { y: yvalue, x: xvalue };


Хоть и obsolete, но GCC 4.6 это еще компилит, и TCC тоже.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 10th July 2025 - 16:54
Рейтинг@Mail.ru


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