Замкнутый контур значений 0-23; 23-0

Исправил
static constexpr uint8_t gTotalDiodes = 24;

void setup () {
  Serial.begin(9600);
//  Serial.println("Start");
}

void print(int8_t  x) {
  x%=gTotalDiodes;
  if (x<0) x+=gTotalDiodes;
  Serial.print(x);
  Serial.print(", ");
};

void loop() {
  for (uint8_t x=0;x<gTotalDiodes;x++) {
    print(x-2);
    print(x-1);
    print(x);
    print(x+1);
    print(x+2);
    Serial.println();
  };
}

Если вывод Start убрать …
Скетч использует 1864 байт (5%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 190 байт (9%) динамической памяти, оставляя 1858 байт для локальных переменных. Максимум: 2048 байт.

И ваш без стартового вывода…
Скетч использует 2084 байт (6%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 190 байт (9%) динамической памяти, оставляя 1858 байт для локальных переменных. Максимум: 2048 байт.

код на ~10% жирнее…

Ну, да. Данные, как видите, одинаковые. Что до кода, так он более функциональный. У меня же значение реально может хранится в переменной типа для последующего использования (хотя здесь это и не нужно), Вы просто печатаете сумму, ничего не сохраняя. Это немного разные программы. Отсюда и разница в коде, а вовсе не от ООП. ООП тут не при делах вовсе.

Да, он прав. Но внимательное смотрение я Вам обломал - поправил код :slight_smile:

Женя. Наши философские расхождения не должны мешать уважать профессионализм друг друга! ИМХО. Нет?

Стандарт требует от пре-инкремента сохранения lvalue.

Конечно, при перегрузке оператора можно хоть слона в холодильник запихивать, это не нарушает стандарт, поскольку это уже не инкремент, а просто два знака “+”, но это не является примером “красивого” кода или “бест практис”.

Да, неужели?

Значит я неправильно перевожу фразу: «The result is a prvalue. The type of the result is the cv-unqualified version of the type of the operand» (§ 8.2.6, ISO/IEC 14882:2017)

Надо английский подтягивать :frowning:

5.3.2 Increment and decrement [expr.pre.incr]
1 The operand of prefix ++ is modified by adding 1, or set to true if it is bool (this use is deprecated). The
operand shall be a modifiable lvalue. The type of the operand shall be an arithmetic type or a pointer to
a completely-defined object type. The result is the updated operand; it is an lvalue, and it is a bit-field if
the operand is a bit-field.

стр 109


это просто странная дискуссия, инспирированная уж точно не научным вопросом.
Женя, дорогой, а как тогда написать: ++(++x)? Уточни, если не трудно. Если результат не левое?

5.2.6 Increment and decrement [expr.post.incr]
1 The value of a postfix ++ expression is the value of its operand. [ Note: the value obtained is a copy of
the original value — end note ] The operand shall be a modifiable lvalue. The type of the operand shall be
an arithmetic type or a pointer to a complete object type. The value of the operand object is modified by
adding 1 to it, unless the object is of type bool, in which case it is set to true. [ Note: this use is deprecated,
see Annex D. — end note ] The value computation of the ++ expression is sequenced before the modification
of the operand object. With respect to an indeterminately-sequenced function call, the operation of postfix
++ is a single evaluation. [ Note: Therefore, a function call shall not intervene between the lvalue-to-rvalue
conversion and the side effect associated with any single postfix ++ operator. — end note ] The result is a
prvalue. The type of the result is the cv-unqualified version of the type of the operand. See also 5.7 and 5.17.
2 The operand of postfix – is decremented analogously to the postfix ++ operator, except that the operand
shall not be of type bool. [ Note: For prefix increment and decrement, see 5.3.2. — end note ]


А твоя цитата из раздела про ПОСТ-инкремент. Я её выше привел.
Ты перепутал. И я даже не стану тебя говнить за это!
Но услышать извинения было бы приятно… хотя я в такое не верю.

Да, я действительно не так тебя понял.

Давай прекращать. Большинству этот разговор непонятен, а нам (по крайней мере, мне) неприятен. Жили себе тихо и дальше давай жить.

Я проспался и понял, что я написал бред)

С одной стороны, нулевой и единичный элементы - фундаментальное понятие алгебры.
А с другой - при необходимости что-то перенумеровать, никакие уникальные свойства этих понятий не используются, поэтому нумерация “один-два-три-четыре” ничем не лучше и не хуже, чем “ноль-один-два-три”, а та в свою очередь - чем “красный-оранжевый-желтый-зеленый”. Мы просто приписываем определенному положению в последовательности определенный термин. И совершенно не важно, будет этот термин называться “ноль”, “один”, “красный” или “велосипед”.

3 лайка

совершенно не возражаю, а еще чуток обобщив => Хоть горшком назови, тока в печку не ставь!

зы. “Древние украли все наши лучшие идеи!” М.Твен.