Борьба за объем - каждодневная реальность любого разработчика, поскольку любой микроконтроллер имеет конечное и весьма скромное количество памяти на борту.
Ниже пример кода, на котором явно видны чудеса GCC (а именно этот компилятор используется в среде разработки Arduino).
Итак, приступим.
Рассмотрим первый скетч:
String string1="hello"; String string2="world"; byte stub=0; void setup() { } void loop() { if (string1 != string2) { stub =1; } }
А теперь посмотрим, что будет после компиляции :
Binary sketch size: 2,016 bytes
Немного изменим код:
String string1="hello"; String string2="world"; byte stub=0; void setup() { } void loop() { if ( (string1.length() != string2.length()) || (!string1.startsWith(string2) )) { stub =1; } }
Binary sketch size: 2,010 bytes
Шесть байт экономии. А если представить что аналогичных операций несколько - набегает изрядная цифра.
Теперь рассмотрим пример с равенством:
String string1="hello"; String string2="world"; byte stub=0; void setup() { } void loop() { if (string1 == string2) { stub =0; } } Binary sketch size: 2,014 bytes
А теперь измененный вариант:
String string1="hello"; String string2="world"; byte stub=0; void setup() { } void loop() { if ( (string1.length() == string2.length()) && (string1.startsWith(string2) )) { stub =0; } }
Binary sketch size: 2,008 bytes
Разница опять 6 байт.
Это пример оптимизации "на ходу". Конечно, новая версия компилятора вполне может внести коррективы. Основная мысль - если операцию можно сделать другим способом - обязательно попробуйте его. Быть может, он окажется лучше очевидного :-)