const char PROGMEM Schreibweise

Hallo,
was ist der Unterschied zwischen

const char R_root[] PROGMEM = "/";

und

static const char* PROGMEM R_root = "/";

nur die Schreibweise, oder hat das auch Auswirkungen auf die spätere Verwendung der Konstante?
Ich habe beide Schreibweisen in diversen ESP32 Lib's gefunden.

Hmmm ....
Eigentlich sollte jedes C und C++ Buch da Erleuchtung bringen

Übrigens, ist die Bedeutung von static vom Kontext abhängig.
Aber den hast du ja erfolgreich weg geschnitten.

Ansonsten ist die Wirkung (meist) gleich, aber der Type der Konstanten unterschiedlich.
Es macht also manchmal einen Unterschied.

Nachtrag:

static const char* PROGMEM R_root = "/";

Mag mein Kompiler nicht.

Richtiger wäre:

static const char* const R_root  PROGMEM = "/";

Welche von den Definitionen ist C und welche ist C++ ?

Richtiger wäre:
static const char* const R_root PROGMEM = "/";

Mein Compiler frisst beides.

Die Verwendung aller server.on(....) mit PROGMEM Konstanten verringert den Speicherbedarf nach dem Upload auf den ESP32 um über 4kB. :slight_smile:

vorher:

server->on("/format", HTTP_GET, [&](AsyncWebServerRequest* request) { handle_format(); request->send(200, F("text/plain"), F("OK)); });

jetzt:

server->on(FPSTR(R_format), HTTP_GET, [&](AsyncWebServerRequest* request) { handle_format(); request->send(200, FPSTR(R_text_plain), FPSTR(R_ok)); });

und von den server->on(....) Funktionen habe ich mehr als 20.

Welche von den Definitionen ist C und welche ist C++ ?

Da beides von Arduino durch den gleichen C++ Compiler genudelt wird, ist es in diesem Fall beides C++.

C geht etwas anders mit Typen um.

Mein Compiler frisst beides.

Schätze mal, dass sich das bei der nächsten Compilerumstellung ändern wird.

Schätze mal, dass sich das bei der nächsten Compilerumstellung ändern wird.

Wie immer....

Erinnert mich irgendwie an den Umstieg von Visual Studio 2003 auf 2008.

Die Umstellung einer riesigen Windows App mit 1MB Quellcode in der Hauptanwendung und 5 zusätzlichen dll's, hat mich fast 4 Wochen Arbeit gekostet.

Bloß gut, dass der VS Compiler um den Faktor 100 schneller ist, als der in der Arduino IDE.

Wie immer....

Halloooo....

static const char* PROGMEM R_root = "/";
ist falsch.
War auch schon vor Jahren falsch, bzw. irre inkonsequent.

static const char* const R_root PROGMEM = "/";
Ist korrekt.

Also ist der Compiler besser geworden.
Diese Verbesserung hat nichts mit deinen schlechten VS Erfahrungen zu tun.
Oder?

static const char* const R_root PROGMEM = "/";

habe ich jetzt auch in meinem Sketch so übernommen.

Es ist halt verwirrend, weil jeder GitHub'ler seine "weltbeste" Lib dort veröffentlicht.

Das isat der Vor-/Nachteil von OpenSource. Entscheiden was für Dich brauchbar ist, musst Du.

Gruß Tommy

Es ist halt verwirrend, weil jeder GitHub'ler seine "weltbeste" Lib dort veröffentlicht.

Tipp:
Menschen sind nicht perfekt.
Du nicht, ich nicht.
Auch die Githubler nicht.

Das Maß der Dinge ist die C++ Standard Spezifikation.
Und selbst die ändert sich über die Jahre in ihren Randgebieten.

Es macht einfach keinen Sinn, die "Schuld" an deiner Misere auf Githubler und VS zu verteilen.
Das fördert nur eine negative Einstellung.
Und das wollen wir doch nicht....

Tue: Schönes dickes modernes C++ Buch unters Kopfkissen legen.
Lerne es auswendig.

...Buch unter Kopfkissen
Mein letztes C++ Buch war dieses (siehe Anhang) mit 768 Seiten.
Allerdings habe ich das ganze .NET bis heute strikt verweigert, weil der ganze .NET Mist sinnlos aufgeblasen und dadurch langsam ist.
Dazu kommen noch die unausgereiften Language-Packs.
Buttons sind viel zu klein für globale Übersetzungen: z.B. "Klicken sie hi...". was soll der MS geneigte Anwender damit anfangen.
Wahrscheinlich wurde die Sprache nur erfunden, damit auch der letzte Inder mit Green Card, Programme in einer Mischung aus J-Script und VB im Auftrag von MS schreiben kann.

Von Windows Desktop Anwendungen habe ich mich schon seit 10 Jahren verabschiedet.

Ich bleibe hier der Community treu und lerne, und lerne und lerne, wie man µC's programmiert.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.