Wenn es funktioniert musst du auch nichts optimieren. Wird ja nicht oft aufgerufen
Wenn du kompakten Quell-Code willst, würde sich snprintf() anbieten. Damit kann man das in einer Zeile erschlagen. Der Flash Verbrauch ist zwar ziemlich hoch, aber das ist nicht schlimm wenn man noch Platz hat.
Hallo und danke für die schnelle Antwort! Mir geht es um Laufzeitprobleme, ob beispielsweise ein Array anderen Speicher überschreibt. Wenn das nicht der Fall ist, kann ich mich der Erweiterung widmen, bin ja noch nicht fertig.
ob beispielsweise ein Array anderen Speicher überschreibt
Dein Array ist 9 groß. Das reicht für 8 Zeichen. Sollte also eigentlich passen. Man kann solche temporären Puffer auch etwas größer machen als eigentlich nötig wenn man etwas Spielraum möchte.
Sicher wäre hier auch snprintf(). Das schreibt nicht über das Array hinaus. Wobei der String im Fehlerfall allerdings nicht korrekt terminiert ist, da er bist in die letzte Stelle schreibt und kein Platz mehr für NULL ist.
Das wird schon beim Kompilieren festgelegt. Wenn man keine Debug Ausgaben hat, kommentiert man "#define DEBUG" aus. Dann werden die dann erst gar nicht übersetzt, der Code wird kleiner und man muss man keine Abfrage zur Laufzeit machen.
Ja. Du verstehst nicht was das Makro macht. Das ersetzt vor dem Kompilieren den Text "debugPrintln" durch "Serial.Println". Aber nur wenn das #define gesetzt ist.
Du machst deine Debug Ausgabe so:
debugPrintln(F("Adafruit VS1053 Library Test"));
Wenn du dann die Zeile #define DEBUG auskommentierst, wird das nicht kompiliert, da er das dann durch nichts ersetzt.
Dadurch muss man nicht in jede Zeile #ifdef#endif schreiben.
Das ist eine ganz einfache Text-Ersetzung. Eine Typ-Überprüfung findet da nicht statt. Die Parameter heißen halt "text". Du kannst genauso "args" schreiben.
Und wenn du mehrere Argumente brauchst (für Formatierungen wie HEX oder BIN) macht man das: