Нет. У меня-то есть, просто по лицензии я не имею права распространять. Потому я и говорил, "как нарою пиратскую версию выложу". Пока не нарыл. Правда, не сказать, что каждый день ищу. Потому, скажем "пока не попалось".
В любом случае, пользователей ардуиноИДЕ это пока не касается :(
ну почему, в аддон ардуино для СТМ32 уже можно добавить тулчейн с поддержкой С++17, я в местной теме про блюпилл писал как это сделать. В библиотеке для матриц я даже пробовал применять, но потом отказался - слишком сложно юзерам обьяснять
Возьмите любую сколько-нибудь нетривиальную программу на первых версиях ECMAScript. Классов нет в природе, а объектов и наследуемых (в т.ч. и множественно), и полиморфных, и каких угодно ...
Почитайте вот это. Я там со многим не согласен и поспорил бы, но суть подхода - это как раз то, что я пытаюсь Вам сказать.
Ну неважно, как Вы это назовете, класс или структура. Важно, что это новый тип со своими свойствами, методами и т.д. т.е. ОБЪЕКТ. Далее мы уже пишем программу, используя объекты, и в 99% случаем даже не знаем, как и что внутри этого объекта работает.
Собственно объекты родились не от хорошей жизни. Когда компьютерные программы начали занимать мегабайты, то стало ясно, что один человек не в состоянии знать до мелочей как и что там работает. Поэтому для создания программ появились "кирпичики" в виде готовых объектов, написанных другими людьми. Многие программисты вообще не могут понять, что там написано в коде объекта :)
Да, зачастую за счет таких вот "непонятных" строк можно здорово сократить код, а не надеяться, что за тебя это сделает компилятор (хотя может и сделает, кто его знает).
Она получает в виде входного параметра указатель на массив символов. Перед "употреблением" в массиве нужно оставить только символы, код которых меньше 0xD0. Не заменить на что-то, а убрать. Ни фига не выходит. Не хотят убираться, либо лажа получается. Не сильно то я умею работать с указателями :(
void UTFT::print(char *st, int x, int y, int deg)
{
int stl, i;
// for russian text
// заменяем входной массив.
//
if (x==RIGHT) x=(disp_y_size+1)-(stl*cfont.x_size);
if (x==CENTER) x=((disp_y_size+1)-(stl*cfont.x_size))/2;
for (i=0; i<stl; i++)
if (deg==0)
printChar(*st++, x + (i*(cfont.x_size)), y);
else
rotateChar(*st++, x, y, i, deg);
}
Входной массив содержит "мусорные символы" 0xD0 и 0xD1. Их нужно убрать из массива. Т.е. создать новый массив, переписав из входного только нужные символы, и дальше уже "отдать" его процедуре.
вот именно, они должны быть константами, с классификатором const
Я бы даже сказал, что в С++20 - constexpr. Тогда можно спокойно использовать if constexpr и никаких #if даром не надо.
в С++20
Вспоминая вопрос полугодичной давности. Вам удалось раздобыть?
Нет. У меня-то есть, просто по лицензии я не имею права распространять. Потому я и говорил, "как нарою пиратскую версию выложу". Пока не нарыл. Правда, не сказать, что каждый день ищу. Потому, скажем "пока не попалось".
Вспоминая вопрос полугодичной давности. Вам удалось раздобыть?
для if constexpr по-моему, C++17 достаточно
Нет. У меня-то есть, просто по лицензии я не имею права распространять..
Услышал
для if constexpr по-моему, C++17 достаточно
Да, это меня что-то переклинило. Там же появились и inline-переменные, которые и создают основное удобство использования if constexpr
В любом случае, пользователей ардуиноИДЕ это пока не касается :(
В любом случае, пользователей ардуиноИДЕ это пока не касается :(
ну почему, в аддон ардуино для СТМ32 уже можно добавить тулчейн с поддержкой С++17, я в местной теме про блюпилл писал как это сделать. В библиотеке для матриц я даже пробовал применять, но потом отказался - слишком сложно юзерам обьяснять
Кончено, могу.
Приведите пример.
Возьмите любую сколько-нибудь нетривиальную программу на первых версиях ECMAScript. Классов нет в природе, а объектов и наследуемых (в т.ч. и множественно), и полиморфных, и каких угодно ...
Почитайте вот это. Я там со многим не согласен и поспорил бы, но суть подхода - это как раз то, что я пытаюсь Вам сказать.
Ну неважно, как Вы это назовете, класс или структура. Важно, что это новый тип со своими свойствами, методами и т.д. т.е. ОБЪЕКТ. Далее мы уже пишем программу, используя объекты, и в 99% случаем даже не знаем, как и что внутри этого объекта работает.
Собственно объекты родились не от хорошей жизни. Когда компьютерные программы начали занимать мегабайты, то стало ясно, что один человек не в состоянии знать до мелочей как и что там работает. Поэтому для создания программ появились "кирпичики" в виде готовых объектов, написанных другими людьми. Многие программисты вообще не могут понять, что там написано в коде объекта :)
Многие программисты вообще не могут понять, что там написано в коде объекта :)
ну знаете, многие "программисты" не могут понять и вот эту строчку:
но это вовсе не значит, что битовые операции не нужны
Надо повышать свой уровень - и обьекты станут понятными :)
Да, зачастую за счет таких вот "непонятных" строк можно здорово сократить код, а не надеяться, что за тебя это сделает компилятор (хотя может и сделает, кто его знает).
Вот не могу врубиться ....
Есть процедура:
print(char *st){
тело процедуры
}
Она получает в виде входного параметра указатель на массив символов. Перед "употреблением" в массиве нужно оставить только символы, код которых меньше 0xD0. Не заменить на что-то, а убрать. Ни фига не выходит. Не хотят убираться, либо лажа получается. Не сильно то я умею работать с указателями :(
Подскажите кто-нибудь :)
Что такое "убрать"? Заменить значение текущей ячейки на содержимое следующей?
*st=*(st+1)
В любом случае, пользователей ардуиноИДЕ это пока не касается :(
Почему? У меня 17-ый всё время настроен. Вот. пожалуйста:
Код процедуры:
Входной массив содержит "мусорные символы" 0xD0 и 0xD1. Их нужно убрать из массива. Т.е. создать новый массив, переписав из входного только нужные символы, и дальше уже "отдать" его процедуре.
Вот здесь "перед употреблением" "убираются" все символы не являющиеся командами языка BrainFuck. Разбирайтесь
Кто мешает не передавать запрещёнку в функцию?
Вот здесь "перед употреблением" "убираются" все символы не являющиеся командами языка BrainFuck. Разбирайтесь
Ну я конечно не преподаватель, мне сложно так сразу ....
а за счет чего там увеличивается ncmd ?
Кто мешает не передавать запрещёнку в функцию?
Как ? Функция вызывается из разных мест, зачастую из других функций.
Не передавать не получится, нужно "резать" перед выводом на экран, и не в цикле вывода, т.к. тогда strlen(st) вернет неверно значение длины.
Почему? У меня 17-ый всё время настроен.
У меня тоже 17 настроен. Я про 20.
Ну, если "резать", то я выше показал как.
Ну, если "резать", то я выше показал как.
Ну видимо я слишком тупой чтобы понять :(
Как это сделать в цикле ?
Вот типичный пример. Вы ругаете ООП, не понимая, что это такое. Приведённый Вами пример
Это ни грамма не ООП. Это обычная процедурная архитектура.
Если бы здесь был ООП, то тип дисплея отрабатывался бы не через if, а через наследование. И тогда всё лишее было бы выброшено.
Т.е. Вы (и многие) ругаете не ООП, а своё непонимание его принципов и неумение им пользоваться.
а за счет чего там увеличивается ncmd ?
за счёт
ncmd = strspn(p, bfCommands)
Разбирайте, там же всё написано. Ничего не прячется.
а за счет чего там увеличивается ncmd ?
за счёт
ncmd = strspn(p, bfCommands)
Разбирайте, там же всё написано. Ничего не прячется.
А если первые символы массива bfProgram не содержат ни одного символа массива bfCommands ?
strspn(p, bfCommands) вернет "0" ?
Ну, если "резать", то я выше показал как.
Ну видимо я слишком тупой чтобы понять :(
Селяви
Если бы здесь был ООП, то тип дисплея отрабатывался бы не через if, а через наследование. И тогда всё лишее было бы выброшено.
Я действительно не понимаю, от какого класса можно наследовать тип дисплея.
Можно наследовать тип контроллера, ибо дисплей это просто матрица.
Т.е. Вы (и многие) ругаете не ООП, а своё непонимание его принципов и неумение им пользоваться.
Я не ругаю ООП, тут Вы неправы :) Я говорю, что не всегда и не везде нужно использовать объекты.
Я не ругаю ООП, тут Вы неправы :) Я говорю, что не всегда и не везде нужно использовать объекты.
объекты это просто структуры данных для удобства программиста
ООП это наследование инкапсуляция полиморфизм
применять или нет определяется стилем мышления программиста
у скудного опыта новичка еще не укладывается в сознании
все приходит с опытом
на досуге читайте чужие программы на https://github.com/
объекты это просто структуры данных для удобства программиста
ООП это наследование инкапсуляция полиморфизм
применять или нет определяется стилем мышления программиста
Абсолютно с Вами согласен. Но не только мышлением, а и целесеобразностью.
Хотя классы, объекты, структуры и т.п. очень удобная вещь :)
у скудного опыта новичка еще не укладывается в сознании
все приходит с опытом
на досуге читайте чужие программы на https://github.com/
Спасибо, я этим ОБЯЗАТЕЛЬНО займусь :)