YS писал(а):Я бы не сказал, что это как-то связано именно с C++. Просто GCC в данном конкретном случае оказался немного умнее, чем я думал.
Нет. Для сегодняшних практик программирования на С/С++ учет работы оптимизатора - ключевой момент.
И подстановка констант - самая базовая оптимизация, которая есть даже в неоптимизирующем TCC.
YS писал(а):Гм, странно.
Это, как раз, понятно, если понимать как работает компилятор.
YS писал(а):Дефайны - очень мощный инструмент Си.
И порождающий кучу проблем. Поэтому пользоваться им следует только там, где другими средствами сделать требуемое нельзя.
Кстати, я был неправ.
Для С++ константы задаются как const type varname, т.е. в приведенном скетче все сделано правильно. Для С это не применимо, поэтому там используются enum'ы для чисел и макросы для всего остального. Но ардуино - это С++.
YS писал(а):Куда как важнее, чем будет занята голова программиста. Причем между содержимым головы программиста и содержимым памяти МК есть прямая корреляция.
Разумеется. Поэтому надо вовремя бороться с навязыванием взглядов, приводящих к получению нечитаемого и глючного кода, притом как правило - без выигрыша в производительсности (но под лозунгом "производительность любой ценой").
YS писал(а):Необходимость в ней есть всегда, разнится требуемая степень оптимизации (а также ее цель).
Очень важное примечение. Но ты говоришь о одноцелевой оптимизации - оптимизации расходования ресурсов. Меж тем не надо забывать и о других факторах - читабельности и поддерживаемости программы, от которых напрямую зависит ее глючность.
И выкидывание переменных или сокращение блоков часто приводит к утрате именно читабельности. В таких случаях выкидывание переменной лучше поручить оптимизатору.
YS писал(а):если можно не использовать больших библиотек - их не надо использовать
Это не столь однозначный вопрос. Очень сильно зависит от задач и конкретного случая.
Но если библиотека проверенная и широко используется - лучше взять ее, чем писать свой велосипед, который будет глючным и медленным.
Недавний пример - ковырял код первой ревизии гита. Он подключает libopenssl только ради расчета SHA1. А все потому, что в openssl эта функция проверенная и вылизанная по производительности.
Другой пример - некоторые вещи намного сложнее, чем кажутся. Например, различные велосипеды для разбора XML регулярно падают на корректных файлах из-за того, что их автор не учел какой-то момент синтаксиса.
С другой стороны - врядли есть смысл подключать библиотеку вывода на 44780 от Васи Пупкина.