не "пишется", а вызывает ошибку в процессе компиляции. В вашей терминологии "не помещается" Как вы, возможно, можете наблюдать, после явного указания типа инициализируемой переменной ошибка более не появляется. Возможно, мои объяснения - ерунда. Предложите, пожалуйста, правильное объяснение. Если для вас это по какой-то причине невозможно - просто помолчите в сторонке, пока кто-нибудь умный не объяснит.
Добавлено after 13 minutes 9 seconds: я понял, в чём дело всё действительно намного проще, чем я думал: нам нужно инициализировать структуру All_ChannelData_t, массив на 8 экземпляров ChannelData_t, и сами структуры ChannelData_t. "Просто добавь фигурные скобки"
Что такое end, begin и silo нам предлагается угадать?
PS: auto удаляет ссылки, квалификаторы const и квалификаторы volatile. Не в этом дело?
Догадаемся, что речь идёт о std::end и std::begin
Определение в IAR Спойлер
Код:
// TEMPLATE FUNCTION begin template<class _Elem> inline constexpr const _Elem *begin(initializer_list<_Elem> _Ilist) _NOEXCEPT { // get beginning of sequence return _Ilist.begin(); }
// TEMPLATE FUNCTION end template<class _Elem> inline constexpr const _Elem *end(initializer_list<_Elem> _Ilist) _NOEXCEPT { // get end of sequence return _Ilist.end(); }
Определение в GCC по сути то же самое Спойлер
Код:
/** * @brief Return an iterator pointing to the first element of * the initializer_list. * @param __ils Initializer list. */ template<class _Tp> constexpr const _Tp* begin(initializer_list<_Tp> __ils) noexcept { return __ils.begin(); }
/** * @brief Return an iterator pointing to one past the last element * of the initializer_list. * @param __ils Initializer list. */ template<class _Tp> constexpr const _Tp* end(initializer_list<_Tp> __ils) noexcept { return __ils.end(); } }
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Перед выполнением математических операций все приводится к одному типу и для целых это будет int, если его достаточно, т.е. даже 'A' + 1 дает int. А, тут итераторы, тогда все зависит от перегрузки операторов, тем более в принципе ptrdiff_t как int и объявлен... Компилятор какой?
Последний раз редактировалось Reflector Сб ноя 17, 2018 17:14:38, всего редактировалось 1 раз.
Тип то тут одинаковый. Но вступает в силу "арифметика указателей". Результат разности двух указателей это по классике будет int. Будет ли компилятор подбирать для него псевдоним ptrdiff_t ? Я бы не стал
Ну как бы в плюсах должен. Он же видит, что вычитаются указатели.
Вот как объявлен ptrdiff_t:
Код:
typedef int ptrdiff_t;
Ptrdiff_t - это новый тип? Нет, это псевдоним для существующего типа, новый тип тут не создается, потому вполне логично, что auto выводит тип разности указателей как int. Тем более ptrdiff_t появился относительно недавно, а указатели были давно и как-то без него обходились, так что никакие стандарты тут не игнорятся.
Добрый день, делаю bootloader, по включению питания сравнивается CRC приложения с текущим CRC, если совпадает, значит приложение зашито и переходим в него если нет то переходим в bootloader. Так вот теперь столкнулся с проблемой как обратно вернуть в bootloader, по программному условию? После того как делаю программный reset, он у меня опять в приложение уходит, а передать из приложение в bootloader переменные можно только через Flash, но такой вариант, не очень нравиться. Долго, надо оперативнее перейти.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения