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

Anonymous

unregistriert

1

12.08.2003, 13:39

Fehler beim Einsatz von Makros

Hallo!

Ich hab ein paar Makros z. B.

Quellcode

1
#define XXX (a. b) {...(a)...(b)...}

Wenn ich dann aber irgendwo
[code]
XXX (Var1, Var2}
/code]
einsetze
kommen einige Fehlermeldungen wie "Variable a nicht deklariert" "Variable b nicht deklariert"

Was mach ich falsch?

2

12.08.2003, 13:58

machst du da immer Punkt in deinen Makros zwischen a und b?

Schick mal dein Orginalmakro und wo dus aufrufst!
Ein Gespenst geht um in Europa...

Anonymous

unregistriert

3

12.08.2003, 15:02

Hab den Fehler gefunden!

Es darf keine Lücke zwichen XXX und (a, b) geben. Also

Quellcode

1
2
#define XXX(a, b) {...(a)...(b)...
}

Anonymous

unregistriert

4

12.08.2003, 15:12

Darf man dem Makro eigentlich auch ganze Funktionsaufrufe übergeben?
z. B.

Quellcode

1
2
3
#define MAKRO_FUNKTION(f) {(f);}
[code]
 ??? 

Jens

Treue Seele

Beiträge: 117

Wohnort: Dresden

  • Private Nachricht senden

5

12.08.2003, 15:22

nalogisch

aber Zeilenumbrüche musst Du mit \ kennzeichnen.

6

12.08.2003, 16:20

Ja, es wird halt immer nur eine Textersetzung durcheführt.

Aber ich rate dir von Makros ab.
1. Sie sind nicht typensicher.
2. Komplexe Makros sind schwer zu handhaben
3. Sie sind für den Debugger nicht verfügbar und erschwerren die Fehlersuche.
Sag' mir was du machen willst und wir finden eine saubere C++ Lösung.[/code]
Ein Gespenst geht um in Europa...

Anonymous

unregistriert

7

12.08.2003, 21:52

z.B. ein Makro, das automatisch eine DirectX-Funktion, die als Parameter angegeben ist ausführen, und, wenn sie fehlschlagt, automatisch den passenden Logbucheintrag generiert.

8

12.08.2003, 22:30

Du willst also den Rückgabewert der Funktion prüfen.

Quellcode

1
2
3
4
5
6
7
void CheckReturnValue(long FunctionReturnValue, 
                      long ErrorCode, 
                      const std::string &ErrorText)
{
    if(FunctionReturnValue == ErrorCode)
        LogError(ErrorText);
}

So vielleicht?
Aber so eine Funktion ist eigentlich überflüssig.
Ein Gespenst geht um in Europa...

Jens

Treue Seele

Beiträge: 117

Wohnort: Dresden

  • Private Nachricht senden

9

12.08.2003, 23:03

Methode zum Prüfen

Er will sich, glaube ich, die gesamten Fehlerabfragen der DX-Funktionen erleichern.
Z. B.:

Quellcode

1
2
3
4
5
if (FAILED(hr = DXFunc(...))
{
 LogError(...)
 return hr;
}


gibt es denn dafür ne saubere C++-Lösung?
Exceptions werden ja, sowei ich weiß nicht durch DX unterstünzt, oder?

10

12.08.2003, 23:15

Was heißt hier saubere C++-Lösng? War das von mir keine?
Anwenung:

Quellcode

1
2
3
CheckReturnValue(D3DDevice->SetRenderState(...),
                D3D_INVALIDCALL, 
                "Die verdammte SetRenderStete-Methode baut nur schrott");
Ein Gespenst geht um in Europa...

Werbeanzeige