Присваивание со сложением в substring
- Войдите на сайт для отправки комментариев
Пнд, 14/01/2019 - 12:39
Поясните почему не работает данный код
Serial.begin(9600); int pos = 0; String string = "0123456789"; Serial.println(string.substring(pos, pos+=2));
Если первый аргумент в substring - 0, все хорошо, но почему не работает в таком виде.
Сначала происходит присваивание, а потом выполнение функции substring? Разделить переменную pos на две start, end?
наерна нада
Serial
.println(
string
.substring(pos, pos+2))
наерна нада
Serial
.println(
string
.substring(pos, pos+2))
а переменную pos увеличивать в следующей отдельной строке?
ant1fr1z,
нафиг такие конструкции, нафиг от слова нах!
Запомните, порядок вычисления аргументов функции в языке НЕОПРЕДЕЛЁН. Это означает, что разные компиляторы (или разные версии одного) имеют право вычислять аргументы как справа налево, так и слева направо, или вообще в произвольном порядке. А если Вы компилируете для многоядерной системы, они имеют право сгенерировать их (аргументов) параллельное вычисление.
Поэтому, даже, если в конкретном компиляторе вдруг заработает так, как Вам надо - это случайность, поменяете компилятор (или его версию) и приплыли - ищите потом эти грабли, когда "всё ведь работало!".
Так, что не выпедривайтесь и ВСЕГДА, ТЩАТЕЛЬНО ИЗБЕГАЙТЕ ПОБОЧНЫХ ЭФФЕКТОВ В АРГУМЕНТАХ!
Поясните почему не работает данный код
Если первый аргумент в substring - 0, все хорошо, но почему не работает в таком виде.
а если второй аргумент в скобки заключить - не заработает? (хотя в целом поддерживаю Евгения)
Формально, С передает параметры в функцию справа налево, поэтому может случица так, что pos+=2 будет вычислено первым, соотвецтвенно второй pos передасца не тот, что думает ТС
а если второй аргумент в скобки заключить - не заработает? (хотя в целом поддерживаю Евгения)
Поймите, порядок неопределён. Об этом прямо сказано в стандарте языка - undefined. Поэтому, какая разница в кобках второй параметр или нет - он может вычисляться раньше первого или позже, и параллельно для многоядерных дел. И чем тут скобки помогут?
Заработать может случайно, до следующей версии компилятора или даже до других опций компилятора/оптимизатора.
Спасибо за пояснения, буду делать это так