# Verbesserung Neopixel Anzeige im Modus Bluetooth Lautsprecher

**URL:** <https://forum.espuino.de/t/verbesserung-neopixel-anzeige-im-modus-bluetooth-lautsprecher/1969>\
**Category:** Software\
**Created:** [22. Mai 2023 um 09:18 UTC](https://forum.espuino.de/t/verbesserung-neopixel-anzeige-im-modus-bluetooth-lautsprecher/1969 "2023-05-22T09:18:55Z")\
**Posts on this page:** 1\
**Showing post:** 4

<div class="post-metadata">

**Author:** ![laszloh](https://forum.espuino.de/user_avatar/forum.espuino.de/laszloh/32/1975_2.png) [@laszloh](https://forum.espuino.de/u/laszloh)\
**Post date:** [22. Mai 2023 um 13:57 UTC](https://forum.espuino.de/t/verbesserung-neopixel-anzeige-im-modus-bluetooth-lautsprecher/1969/4 "2023-05-22T13:57:31Z")

</div>

Hm… das ist nervig, der Absturz ist bei `if constexpr([...])`, das kennt c++11 natürlich nicht. Ich hatte [hier](https://forum.espuino.de/t/automatische-code-formatierung/1908/12) mal beschrieben, was genau das macht (forciert den Compiler zur Optimierung der Verzweigung zur Compile-Zeit). Ist aber ein std++17 Feature und der gcc von Arduino 1.0 spricht leider nur c++11…

Aber wenn ich das repariere, tun sich einige andere Problemstellen auf (zB `ESP_ARDUINO_VERSION_VAL` ist undefined, `std::clamp` gibt es nicht, etc.).

Ich denke das sollten wir generell in der Dev-Branch ansprechen, ob Rückwärtskompatibilität zu Arduino 1.0 gewünscht ist.

  

Vorteil ist dass der Code pflegeleichter wird, wenn wir die Farben in globale Variablen raus ziehen. Und wenn jemand ein anderes Farbschema hat, kann er es einfach an einer Stelle ändern und das ändert dann alle relevanten Teile des Codes (da wir zB für die Playlist ja auch die Farbe Blau verwenden wäre diese auch von search&replace betroffen)

constexpr ist grundsätzlich eine Variable, dessen Wert zur Zeitpunkt des compilierens bekannt ist (gegenüber zB einem const, der zur Laufzeit 1x gesetzt wird). Das erlaubt es dem gcc diese Variable zu optimieren und bringt einiges an Vorteilen gegenüber einem Makro. zB Sichtbarkeit (#define ist im ganzen Code gültig über namespaces hinaus), Sicherheit bei einer Zuweisung.

> <https://stackoverflow.com/questions/42388077/constexpr-vs-macros>

Ein weiterer großer Punkt ist, dass constexpr dich zwingt sauberen C++ Code zu schreiben. ZB:

```cpp
#define begin() x=4
#define end() x=17
[...] // viele Zeilen code
void x(){
  int x = 33;
  begin(); // begin verändert x ohne dass der Programmierer davon __hier__ etwas mitbekommt
  printf("%d", x);
  end();
}

// mit constexpr 
constexpr int begin() {
  return 4;
}

void x(){
  int x = 33;
  begin(); // hier hat begin keine Auswirkung auf x
  [...]
}

```

---

_[View the full topic](https://forum.espuino.de/t/verbesserung-neopixel-anzeige-im-modus-bluetooth-lautsprecher/1969)._
