Forum: PC-Programmierung #define "nummer" "wort" ?


von Gästchen (Gast)


Lesenswert?

Hallo leute,
wieso läuft das nicht durch meinen Compiler?

#define 1 ein
#define 2 zwei
#define 3 drei
#define 4 vier

char zahlen[2][2] = {"1undzwanzig","2undzwanzig"}

#undef 1
#undef 2
#undef 3
#undef 4


Die Meldung...DevC++
macro names must be identifiers

Danke

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> macro names must be identifiers

Da stehts doch.

Es gibt klare Regeln, wie ein "identifier" aufgebaut zu sein hat. Und 
dazu gehört, daß der nicht mit einer Ziffer beginnen darf.

Und Makronamen unterliegen den gleichen Regeln.

von Floh (Gast)


Lesenswert?

Gästchen schrieb:
> char zahlen[2][2] = {"1undzwanzig","2undzwanzig"}

Das geht sowieso schief, das Wort passt da niemals rein :-)

von Gästchen (Gast)


Lesenswert?

ja, weis ich - war nur geschmiere....

hat jemand spontan nen Einfall wie ich Zahlen auschreibe(also als in ein 
char[][])?

von Karl H. (kbuchegg)


Lesenswert?

Gästchen schrieb:
> ja, weis ich - war nur geschmiere....
>
> hat jemand spontan nen Einfall wie ich Zahlen auschreibe(also als in ein
> char[][])?

Jedes C Buch sollte dir eigentlich dazu eine Anregung liefern

#define s_1   "ein"
#define s_2   "zwei"
#define s_20  "zwanzig"

 char zahlen[][] = { s_1 "und" s_20, s_2 "und" s_20 }

Allerdings: wozu?
Solche Dinge setzt man sinnvollerweise zur Laufzeit aus Einzelteilen 
zusammen, wenn man sie braucht. Denn ansonsten müllt man sich den 
Speicher ordentlich zu.

von Rolf Magnus (Gast)


Lesenswert?

Floh schrieb:
> Gästchen schrieb:
>> char zahlen[2][2] = {"1undzwanzig","2undzwanzig"}
>
> Das geht sowieso schief, das Wort passt da niemals rein :-)

Außerdem wüßte, wenn das Definieren solcher Makros ginge, der Compiler 
nicht, was er mit
1
    zahlen[zwei][zwei]
anfangen sollte.

von Klaus W. (mfgkw)


Lesenswert?

Karl heinz Buchegger schrieb:
> char zahlen[][] = { s_1 "und" s_20, s_2 "und" s_20 }

Das war jetzt aber auch nicht sooo viel besser :-)

von Karl H. (kbuchegg)


Lesenswert?

Klaus Wachtler schrieb:
> Karl heinz Buchegger schrieb:
>> char zahlen[][] = { s_1 "und" s_20, s_2 "und" s_20 }
>
> Das war jetzt aber auch nicht sooo viel besser :-)

Das Problem ist, das ich nicht erraten kann, was denn eigentlich die 
Absicht hinter dem Ganzen ist.

Da ein beliebtes Lehrbeispiel darin besteht die Zahlen von 1 bis 100 in 
Textform auszugeben, denke ich das das hier nicht soooo weit davon 
entfernt ist.
Auf jeden Fall aber wollte ich dem TO zeigen, dass die Einschränkung, 
dass Makronamen mit einem Buchstaben anfangen müssen, so schlimm auch 
wieder nicht ist und dass der Compiler Strings zusammenhängen muss. Ob 
er damit was anfangen kann: keine Ahnung. Denn wie gesagt: Ich weiß och 
nicht einmal was es werden soll und welche Technik daher angebracht ist 
:-)

von Klaus W. (mfgkw)


Lesenswert?

Das ist hier doch normal.
Wenigstens die Technik zur Abhilfe ist klar: K&R

(Mein Gemecker bezog sich aber eigentlich darauf, daß du beide
Feldgrenzen frei gelassen hattest. Das findet ein Compiler dann
doch zu lasch.)

von Karl H. (kbuchegg)


Lesenswert?

Klaus Wachtler schrieb:

> (Mein Gemecker bezog sich aber eigentlich darauf, daß du beide
> Feldgrenzen frei gelassen hattest. Das findet ein Compiler dann
> doch zu lasch.)

Irgendwas muss der TO ja schliesslich auch selber können :-)

von Klaus W. (mfgkw)


Lesenswert?

Langsam verstehe ich dein Verhalten hier.
Ich glaube sowas heißt in Medizinerkreisen "manischer Optimismus".

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.