Hallo zusammen,
ich habe ein großes Struct (AVR-GCC), bei dem mir die sprechenden Namen
vor Variablen gerade gehörig auf den Geist gehen. Es sieht ungefähr so
aus:
In Wirklichkeit sind die Namen noch etwas sprechender und auch leider
etwas länger - das Struct ist unübersichtlich geworden und für einen
ordentlichen horizontalen Scrollbalken verantwortlich.
In einer Funktion hätte ich jetzt ein paar Zeiger mit kurzem Namen
vergeben, um die Sache etwas zu entspannen, in etwa so:
1
voidfoo(void)
2
{
3
Subsysdata1_tSs1=&GSettings.Subsys1;
4
Subsysdata2_tSs2=&GSettings.Subsys2;
5
}
was die Sache etwas übersichtlicher gemacht hätte. Das große Struct
liegt allerdings im Flash.
Gibt es bei einem globalen Struct eine Möglichkeit, für Zeiger kürzere
"alias"-Namen zu erzeugen? Oder wie würden langjährige C-Programmierer
soetwas angehen? Muß ich hier die define-Keule herausholen?
Viele Grüße
W.T.
Walter T. schrieb:> constflash dataset_t dataset[] => {> { TXTSUBSYS1_VAR1 , uint8 , {.puint8=&GSettings.Subsys1.var1} ,> SS1V1_DEFAULT, SS1V1_MIN, SS1V1_MAX },> { TXTSUBSYS1_VAR2 , uint8 , {.puint8=&GSettings.Subsys1.var2} ,> SS1V2_DEFAULT, SS1V2_MIN, SS1V2_MAX },> { TXTSUBSYS2_VAR1 , uint16 , {.puint16=&GSettings.Subsys2.var1} ,> SS1V1_DEFAULT, SS2V1_MIN, SS2V1_MAX },> { TXTSUBSYS2_VAR2 , int16 , {.pint16=&GSettings.Subsys2.var2} ,> SS1V1_DEFAULT, SS2V2_MIN, SS2V2_MAX },> }
Das sieht für mich aus als könnte man diesen Code mit nem kleinen Script
automatisch generieren wenn das wirklich noch länger so geht und immer
nur aus den selber Kombinationen von irgendwasVAR1 und irgendwasVAR2
besteht:
Bernd K. schrieb:> [...] wenn das wirklich noch länger so geht und immer> nur aus den selber Kombinationen von irgendwasVAR1 und irgendwasVAR2> besteht:
Geht es nicht. Die Namen sind nur als Beispiel gedacht. In Wirklichkeit
sind das sprechende Namen.
Welcher Mensch mit Verstand würde Daten mit zwei Indizes (SubsysX, VarY)
in struct-Namen packen? Soetwas machen doch nur Codegeneratoren. Hoffe
ich.
Walter T. schrieb:> Welcher Mensch mit Verstand würde Daten mit zwei Indizes (SubsysX, VarY)> in struct-Namen packen? Soetwas machen doch nur Codegeneratoren. Hoffe> ich.
Ohne zu wissen wie die wirklich heißen und welchem Zweck die dienen kann
man nur spekulieren wer das getan hat oder warum.
Deine Frage ist auch ziemlich schwammig formuliert und es ist nicht
wirklich klar was Du eigentlich bezwecken willst. Existiert dieses
Monster-Struct-Array schon und es ist nur zu umständlich zu verwenden
oder suchst Du einen Weg es einfacher hinzschreiben? Enthält es in
Wirklichkeit genausoviel Redundanz in den ellenlangen fast gleichen
Namen wie in dem Beispiel mit den Phantasiebezeichnern? Dann bau einen
Codegenerator (in Python, Perl, whatever, oder evtl auch einfach nur mit
Makros oder X-Makros). Wenn jedoch überhaupt keine Redundanz drin ist,
wie willst Du dann Schreibarbeit sparen?
Ich würde das Ganze auch mit Hilfe von Makros lösen oder mal über den
geschickten Gebrauch der Return-Taste, zusammen mit einer sinnvollen
Nutzung von Tabulatoren, nachdenken. Am besten so, dass die
"geschweiften" Bereiche auch weiterhin erkennbar sind.
Walter T. schrieb:> TXTSUBSYS1_VAR1
Tja, das Erfinden von wirklich sinnvollen Namen ist offensichtlich in
Vergessenheit geraten. Dabei wäre genau dieses wohl der Schlüssel zum
finalen Erfolg.
Merkt ihr was?
Statt griffiger Worte versuchen die Leute heutzutage, gewaltigste
Bedeutungen in abgekürzter und damit unverständlichr Form in jeden
Identifier zu drücken.
Wer also die Kniebeuge hinbekommt, anstatt eines "word" sowas wie
"uint16_t" hinzuschreiben und sich dabei sogar noch modern fühlt, der
muß eben auch mit Wörtern a la "dataset.TXTSUBSYS1_VAR1" anstatt
"set1.index" leben.
W.S.
W.S. schrieb:> Merkt ihr was?> Statt griffiger Worte versuchen die Leute heutzutage, gewaltigste> Bedeutungen in abgekürzter und damit unverständlichr Form in jeden> Identifier zu drücken.
Hm. Genauso könnte man davon ausgehen, daß meine Funktionen alle foo()
oder bar() heißen und Variablen alle 'a', 'b' oder 'c'? Leider bin ich
aber so gemein und versuche bei Forenanfragen von meinem konkreten Fall
zu abstrahieren.
&GSettings.Subsys1.var1 heißt in Wirklichkeit
&GSettings.Motor[0].zMaxDefaultMM, aber dieses Wissen bringt die
Fragestellung kein bischen weiter.
Tom schrieb:> Je nach Anforderung hätte ich keine Skrupel, eine Getter-Funktion zu> bauen.
Wäre das große struct nicht im Flash, wäre das eine Option, die ich auch
in Erwägung gezogen hätte. (Das struct im Flash enthält einen Zeiger auf
eine Variable im SRAM).
Im konkreten Fall habe ich das jetzt gelöst, indem ich die globale
Variable "GSettings" in "GSet" umgenannt und von
unterstrich_schreib_weise zu lowerCamelCase gewechselt habe - das hat
mir ausreichend Zeichen gespart, um sogar mein
90-Zeichen-pro-Zeile-Limit nicht mehr zu verletzten.
Aber eine Allgemeinlösung ist das ja auch nicht.
(OK, der richtige Programmierer hätte natürlich
weise_schreib_strich_unter geschrieben.)