Hallo,
ich habe eine Funktion, welche deklariert ist als
1
intbla(char*str,constchar*format,...)
Einer der unzähligen Aufrufe ist z.B. folgendermaßen:
1
staticconstcharTEST[]__attribute__((section(".irom.text")))="DIES IST EIN TEST";
2
len=bla(buff,TEST);
Dieses Gebilde soll jetzt aber ein einziger Aufruf werden, d.h. die
Deklaration der Konstante soll mit in den Aufruf hinein. Wie mache ich
das? Es ist wichtig, dass das section-Attribut zum Tragen kommt, damit
mir die Ganzen konstanten Texte am Ende nicht im RAM liegen.
Luigi Ganove schrieb:> Dieses Gebilde soll jetzt aber ein einziger Aufruf werden, d.h. die> Deklaration der Konstante soll mit in den Aufruf hinein.
geht nicht. Warum muss das in einer Zeile stehen?
Hmmmm. Das ist schlecht.
Es soll den Quelltext übersichtlicher machen.
Geht es vielleicht als Makro? Ich habe da schon ewig rumprobiert, aber
der Rückgabewert (also "len") macht mir immer einen Strich durch die
Rechnung.
Mir fällt auf, dass solche Fragen ("wie kann ich das
übersichtlicher...") in letzter Zeit öfter auftauchen.
M.E. gibt's dafür nur eine Antwort: übersichtlich ist das, was genauso
aussieht wie das, was es ist.
Auch wenn's schon viele versucht haben: man kann aus C kein Pascal,
Algol oder was auch immer machen; es bleibt doch immer C.
In deinem Beispiel hast Du 1.) eine Variablendeklaration, die ein
Attribut verpasst bekommt + die Zuweisung eines Werts.
Und Du hast 2.) einen Funktionsaufruf mit einer Zuweisung.
Was gewinnst Du dadurch, dass Du 1.) und 2.) (die ausser "TEST" nichts
miteinander zu tun haben) miteinander verwurschtelst?
Ich wette, selbst wenn Du's hinkriegst, wirst Du's in ein oder zwei
Monaten selbst nicht mehr verstehen.
Übersichtlich ist ein Programm m.E. dann, wenn Einer, der den Code noch
nie gesehen hat, innerhalb von ein paar Minuten versteht, worum's geht.
Mit kryptischen Makros erreichst Du das nicht.
Ich will letztlich eine (s)printf-Funktion erhalten, die ich genau so
aufrufen kann, wie die Standard-Funktion, nur, dass sie eben die
bestehenden Strings in den Flash verfrachtet. Ich gewinne quasi
Kompatibilität bzw. Portabilität.
Danke. Ist es normal, dass die Variable "s" im Post über mir dann mit
meiner lokalen Variable "s" im Code kollidiert? Ich habe Stunden nach
einem Fehler gesucht, bis ich "s" in dem Makro mal umbenannt habe...
Ich dachte eigentlich, die geschweiften Klammern ermöglichen das
Erzeugen einer neuen lokalen Variablen.
Eine eigene Frage?
Dieser Thread ist über 9 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.