20.11.2019, 11:02
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.12.2004
Сообщений: 1,306
Сказал спасибо: 337
Сказали Спасибо 76 раз(а) в 33 сообщении(ях)
|
Почему Keil "недоволен"?
Уважаемые, подскажите. Работаю в Кейле. Пытаюсь создать массив в котором хочу сохранять параметры работы моего изделия. Вначале объявляю массив:
uint16_t param[32];
В следующей строке начинаю определять элементы массива:
uint16_t param[0]=0x10;
но компилятор мне пишет:"ошибка 144, значение типа " int " не может использоваться для инициализации записи типа uint16_t param[32]".
Я никак не могу въехать, что в моей записи неверно.
|
|
|
|
20.11.2019, 11:23
|
|
Прописка
Регистрация: 04.02.2007
Адрес: Украина
Сообщений: 126
Сказал спасибо: 44
Сказали Спасибо 29 раз(а) в 20 сообщении(ях)
|
Re: Почему Keil "недоволен"?
Может использовать приведение типов?
Да и зачем Вы, когда определяете элементы массива, опять пишете его тип?
uint16_t param[0]=0x10;
|
|
|
|
20.11.2019, 11:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.02.2013
Сообщений: 1,045
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
|
Re: Почему Keil "недоволен"?
Сообщение от vladh
|
Я никак не могу въехать, что в моей записи неверно.
|
Вы дважды определяете массив c одним именем.
Правильнее было бы
uint16_t param[32] = {0x10, и т. д. };
|
|
|
|
20.11.2019, 11:49
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.12.2004
Сообщений: 1,306
Сказал спасибо: 337
Сказали Спасибо 76 раз(а) в 33 сообщении(ях)
|
Re: Почему Keil "недоволен"?
Сообщение от Ivan_fd
|
Может использовать приведение типов?
Да и зачем Вы, когда определяете элементы массива, опять пишете его тип?
uint16_t param[0]=0x10;
|
Я, к сожалению, не знаю, что такое приведение типов. А то что я при определении значения вновь указал тип, то это автоматом. Вот узнал, что надо делать правильно так:
uint16_t param[32];
void init_array()
{
param[0]=1;
param[1]=0;
....
}
|
|
|
|
20.11.2019, 11:51
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.12.2004
Сообщений: 1,306
Сказал спасибо: 337
Сказали Спасибо 76 раз(а) в 33 сообщении(ях)
|
Re: Почему Keil "недоволен"?
Сообщение от dgrishin
|
Вы дважды определяете массив c одним именем.
Правильнее было бы
uint16_t param[32] = {0x10, и т. д. };
|
Так тоже не проходит.
|
|
|
|
20.11.2019, 12:37
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,085
Сказал спасибо: 2,564
Сказали Спасибо 11,898 раз(а) в 5,971 сообщении(ях)
|
Re: Почему Keil "недоволен"?
Сообщение от vladh
|
Работаю в Кейле
|
В каком? В 5.2х не встречался с таким.
Сообщение от vladh
|
uint16_t param[0]=0x10;
но компилятор мне пишет:"ошибка 144, значение типа " int " не может использоваться для инициализации записи типа uint16_t param[32]".
|
Попробуйте
param[0]=(uint16_t)0x10;
это будет явное указание компилятору, что значение не "int". Так должно пройти.
Сообщение от dgrishin
|
Вы дважды определяете массив c одним именем.
|
Без значений - объявление, а "определение" - задание определенных значений. Но компилятор может и не делать разницы на уровне "правописания", а просто вывалить ошибку. Многие перед переменной ставят тип с целью борьбы со склерозом, только нужно это делать по типу "явного преобразования типа", т.е., помещать в скобки. Тогда ругани не будет.
ПС Указание типа перед именем переменной - объявление/определение и правильно Кейл бычится. А вот описание ошибки не всегда бывает корректным.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
Последний раз редактировалось akegor; 20.11.2019 в 12:40.
|
|
|
|
20.11.2019, 12:50
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.12.2004
Сообщений: 1,306
Сказал спасибо: 337
Сказали Спасибо 76 раз(а) в 33 сообщении(ях)
|
Re: Почему Keil "недоволен"?
Сообщение от akegor
|
В каком? В 5.2х не встречался с таким.
|
5.28
"Попробуйте
param[0]=(uint16_t)0x10;
это будет явное указание компилятору, что значение не "int". Так должно пройти."
Попробовал. Кейл выдал кучу ошибок.
А вот то, что я указал на тип и в объявлении и в определении Кейл выдал не ошибку, а замечание.
Последний раз редактировалось vladh; 20.11.2019 в 12:53.
|
|
|
|
20.11.2019, 13:23
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,085
Сказал спасибо: 2,564
Сказали Спасибо 11,898 раз(а) в 5,971 сообщении(ях)
|
Re: Почему Keil "недоволен"?
Сообщение от vladh
|
Кейл выдал не ошибку, а замечание.
|
Тоже "не айс". Есть элемент непредсказуемости результата.
Сообщение от vladh
|
Кейл выдал кучу ошибок.
|
Значит, посчитал, что "не царское это дело - присваивать значения элементам массива на этапе компиляции".
Странно, что не хочет определять массив, допускает только объявление.
Нет сейчас Кайла под рукой - систему переустанавливаю, переначиняю, перенастраиваю... Проверил бы в 5.23
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
20.11.2019, 13:52
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.12.2004
Сообщений: 1,306
Сказал спасибо: 337
Сказали Спасибо 76 раз(а) в 33 сообщении(ях)
|
Re: Почему Keil "недоволен"?
Я ранее вот так определял:
uint16_t param[32]={0x10,0x11,0x12};
Но почему то сейчас решил сделать по другому.
|
|
|
|
20.11.2019, 14:05
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.12.2004
Сообщений: 1,306
Сказал спасибо: 337
Сказали Спасибо 76 раз(а) в 33 сообщении(ях)
|
Re: Почему Keil "недоволен"?
Вспомнил почему решил найти другой способ. Если определять этим способом, то строчка с значениями становится длинной и неудобочитаемой. А как сделать правильно перенос на другую строку я не знаю.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:01.
|
|