Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

goldfisch007

Alter Hase

  • »goldfisch007« ist der Autor dieses Themas

Beiträge: 446

Wohnort: Süden von Berlin

  • Private Nachricht senden

1

23.10.2009, 23:31

[C++] Wie erstelle ich einen 8 Zeilen MAKRO?

Tja der Titel sagts schon:

Ich will gern ca. 8 Zeilen Code durch nen Makro ersetzten, kann aber nichts finden wie ich das machen soll.... =(

(da ich indiesem Makro auch semikolons verwende geht nen define ja schlecht oder?)

Wie würdet ihr das machen?

mein Ziel ist , ungefähr diesen Block in verschiedenen Modulen des Programms zum Einsatz kommen zu lassen....

C-/C++-Quelltext

1
2
3
4
5
#ifdef WIN32
    Auswahl=_getch();
#else
    Auswahl= ???? //ja da kommt dann irgendwann was für Linux hin...

#endif


Der Hintergrund ist einfach Faulheit + die bessere Anpassbarkeit des Codes, da sowas recht oft vorkommt...

thx an alle die helfen
Wir bauen auf und reißen nieder, so ham wir Arbeit ima wieder...
--------------------
http://www.piratenpartei.de/tmp/images/Slogans_5_0.png
--------------------
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender, geklaut von Helmut xD)

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

2

23.10.2009, 23:35

C-/C++-Quelltext

1
2
3
#define MeinMehrzeiligesMakro Zeile 1; \
Zeile 2; \
Zeile3;

Einfach ein \ vor den Zeilenumbruch packen wenn du mehrere Zeilen möchtest.

Ein Semikolon stört in den Präprozessor eigentlich nicht.

goldfisch007

Alter Hase

  • »goldfisch007« ist der Autor dieses Themas

Beiträge: 446

Wohnort: Süden von Berlin

  • Private Nachricht senden

3

23.10.2009, 23:36

danke dafür!
aber in meinem (recht hoch geschätzten lernbuch)
steht, das defines keine ";" enthalten dürfen ....
naja ich probiers mal

ähm ja ich habs jez ma probiert und bekomme folgende fehler:

Quellcode

1
2
3
4
5
6
7
8
1>CGame.cpp
1>c:\dokumente und einstellungen\fsc\desktop\sg\makros.h(4) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>c:\dokumente und einstellungen\fsc\desktop\sg\makros.h(5) : error C2014: Präprozessorbefehl muss mit dem ersten Zeichen in der Zeile beginnen.
1>c:\dokumente und einstellungen\fsc\desktop\sg\cgame.cpp(41) : error C2121: '#': Ungültiges Zeichen: Möglicherweise das Ergebnis einer Makroerweiterung
1>c:\dokumente und einstellungen\fsc\desktop\sg\cgame.cpp(41) : error C2065: 'ifdef': nichtdeklarierter Bezeichner
1>c:\dokumente und einstellungen\fsc\desktop\sg\cgame.cpp(41) : error C2143: Syntaxfehler: Es fehlt ';' vor 'Konstante'
1>c:\dokumente und einstellungen\fsc\desktop\sg\cgame.cpp(41) : error C2017: Ungültige Escapesequenz
1>c:\dokumente und einstellungen\fsc\desktop\sg\cgame.cpp(43) : error C2143: Syntaxfehler: Es fehlt ';' vor 'switch'


meine Makros.h sieht so aus:


C-/C++-Quelltext

1
2
3
4
5
6
#include <conio.h>

#define ABFRAGE_CHAR    #ifdef _WIN32 \ 
                            Auswahl=_getch(); \
                        #else\
                        #endif


die entsprechende Stelle aus CGame.cpp ist:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
(38)   //Hier wird eine Übersicht der Gebaeude und ihrer Stufen dargestellt

(39)      this->pHaupthaus->MenuePart();
(40)      this->pStollen->MenuePart();
(41)      ABFRAGE_CHAR

(43)      switch(Auswahl)
    {
    case('H'):
    case('h'):



vielleicht wollte ich nur zuviel auf einmal, indem ich das gleich in ne seperate *.h gepackt hab?

naja ich freue mich auf eure Hilfe, derer ich (denk ich) dringend bedürfe
Wir bauen auf und reißen nieder, so ham wir Arbeit ima wieder...
--------------------
http://www.piratenpartei.de/tmp/images/Slogans_5_0.png
--------------------
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender, geklaut von Helmut xD)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

24.10.2009, 01:02

Du kannst nicht ein Makro aus weiteren Präprozessordirektiven zusammensetzen. Was du willst ist wohl eher sowas:

C-/C++-Quelltext

1
2
3
4
5
#ifdef _WIN32
#define ABFRAGE_CHAR Auswahl=_getch();
#else
#define ABFRAGE_CHAR  // was auch immer es sonst sein soll

#endif


Generell würd ich dir aber empfehlen dafür kein Makro sondern ne Funktion zu schreiben:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
inline int getCharacter()
{
#ifdef _WIN32
  return _getch();
#else
  // Was immer es sonst sein soll

  return ...
#endif
}

5

24.10.2009, 01:03

C-/C++-Quelltext

1
2
3
4
#define ABFRAGE_CHAR     #ifdef _WIN32 \ 
                            Auswahl=_getch(); \ 
                        #else\ 
                        #endif


Ich meine zu glauben zu Wissen, dass das nicht korrekt ist.

Korrigiert mich, aber es geht glaub nicht in ein define ein anderes Makro zu klatschen.

Mike

EDITH sagt:
Mist zu langsam -.-

6

24.10.2009, 01:56

Ja du solltest das wirklich wirklich in eine Funktion machen. Das so in ein Makro zu klatschen ist, nunja, abartig :D
Lieber dumm fragen, als dumm bleiben!

goldfisch007

Alter Hase

  • »goldfisch007« ist der Autor dieses Themas

Beiträge: 446

Wohnort: Süden von Berlin

  • Private Nachricht senden

7

24.10.2009, 11:55

ok dann wird das ne funktion....

@ all: thx!

aba wieder ne neue Frage :

bei der Funktion von Dot, müsste doch der Rückgabe Typ eigtl char sein wenn ich über getch nen char erwarte oder steh ich hier auch grad wieder aufm Schlauch?
Wir bauen auf und reißen nieder, so ham wir Arbeit ima wieder...
--------------------
http://www.piratenpartei.de/tmp/images/Slogans_5_0.png
--------------------
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender, geklaut von Helmut xD)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

24.10.2009, 12:14

Zitat von »"goldfisch007"«

bei der Funktion von Dot, müsste doch der Rückgabe Typ eigtl char sein wenn ich über getch nen char erwarte oder steh ich hier auch grad wieder aufm Schlauch?


Ja im Prinzip hast du da recht. Bei diesen get-Funktionen isses nur üblich einen int zu returnen weil wenn du z.b. aus einer Datei liest musst du auch irgendwie ein EOF zurückgeben können was mit char net geht weil das net eindeutig wäre. Bei _getch() gibts das aber net und du kannst daher auch einen char returnen...

goldfisch007

Alter Hase

  • »goldfisch007« ist der Autor dieses Themas

Beiträge: 446

Wohnort: Süden von Berlin

  • Private Nachricht senden

9

24.10.2009, 12:20

kk thx
Wir bauen auf und reißen nieder, so ham wir Arbeit ima wieder...
--------------------
http://www.piratenpartei.de/tmp/images/Slogans_5_0.png
--------------------
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender, geklaut von Helmut xD)

Werbeanzeige