www.mikrocontroller.net

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


Autor: Gästchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Floh (Gast)
Datum:

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

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

Autor: Gästchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, weis ich - war nur geschmiere....

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
    zahlen[zwei][zwei]
anfangen sollte.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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 
:-)

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Klaus Wachtler (mfgkw)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.