Das geht so nicht, weil defaults[] bei der baz1-Initialisierung nicht
bekannt ist. Ich mag die Reihenfolge aber nicht umdrehen, weil die Liste
hinter defaults[] in Wirklichkeit sehr lang und langweilig ist. Die
ersten Zeilen von baz1 sind viel interessanter und könnten gerne am
Anfang der Datei stehen.
Mit Funktionen geht es doch auch, geht das nicht so ähnlich für Daten?
Peter II schrieb:> hilft hier aber nicht weiter.
warum nicht? Damit könnte er doch "static int defaults[];" in der Zeile
vor baz1 schreiben. Für den Compiler reicht es, den Rest mach der
Linker.
Achim S. schrieb:> warum nicht? Damit könnte er doch "static int defaults[];" in der Zeile> vor baz1 schreiben. Für den Compiler reicht es, den Rest mach der> Linker.
weil der Compiler schon weiß das es ein Zeiger ist, mehr muss er gar
nicht wissen. Es würde nur helfen wenn es kein Zeiger ist.
Peter II schrieb:> weil der Compiler schon weiß das es ein Zeiger ist, mehr muss er gar> nicht wissen. Es würde nur helfen wenn es kein Zeiger ist.
Er muss aber wissen, dass eine Variable mit Namen defaults existiert und
welchen Typ sie hat. Ohne forward declaration weiß er das an der Stelle
ihrer ersten Verwendung nicht.
Stefan E. schrieb:> Er muss aber wissen, dass eine Variable mit Namen defaults existiert und> welchen Typ sie hat. Ohne forward declaration weiß er das an der Stelle> ihrer ersten Verwendung nicht.
ok, ich hatte vermutet er meckert schon beim typedef.
Peter II schrieb:> ok, ich hatte vermutet er meckert schon beim typedef.
Ist auch ein wenig gemein vom OP, Struct-Member und Variable gleich zu
benennen. ;-)
Johann L. schrieb:
> Als GNU-Erweiterung geht eine tentative Definition vor baz1:> static int defaults[];
Das sieht gut und logisch aus, geht aber streng genommen nicht, sprich,
wenn man -pedantic benutzt. Ansonsten geht es mit -std=c99, c11, gnu11.
> Mit Standard-C braucht's im Tentative die Array-Größe:> static int defaults[42];
Das sieht nicht so gut aus, weil man denkt, es werden 2 Arrays erzeugt.
Außerdem muss man die Größe kennen oder immer die maximale Größe nehmen.
Ich brauche aber viele solche Dateien mit ganz unterschiedlich vielen
Elementen.
Wahrscheinlich überlasse ich das dem Linker, also nicht static und vorne
dran ein extern int defaults[];
Ja, man kann es mir nicht recht machen. Deshalb ein extra dickes Danke!
eagle user schrieb:> Wahrscheinlich überlasse ich das dem Linker, also nicht static und vorne> dran ein extern int defaults[];
Sorry für meinen ersten Post, wo ich "extern" vergessen habe. Natürlich
geht static und extern zusammen, also
extern static int defaults[];
Rufus Τ. F. schrieb:>>Achim S. schrieb:>> Natürlich geht static und extern zusammen>> Magst Du das nochmal genauer erläutern?
Freitag morgen nach Weiberfastnacht: Bitte bis Aschermittwoch alle post
von heute vergessen!! Melde mich dann wieder
eagle user schrieb:> Johann L. schrieb:>> Mit Standard-C braucht's im Tentative die Array-Größe:>> static int defaults[42];>> Das sieht nicht so gut aus, weil man denkt, es werden 2 Arrays erzeugt.
Diese "denkt man", es würden 2 Arrays erzeugt? Im Sprachstandard ist
das klar geregelt.
eagle user schrieb:> Hier (mir) geht es schließlich um Schönheit am Arbeitsplatz ;)
Dann nimm Lingua Romana Perligata, dann kannst du in Latein schreiben.
Aber selbst das wird dir nicht ersparen, solide Sprachkenntnis zu
erwerben für den Einsatz am "Arbeitsplatz".
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.