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

1

02.06.2005, 15:42

Hi David -> warum TB_OK == 0

Ein Frage habe ich an Dich.
Ich habe mir deinen Source mal angesehen, dabei ist mir aus gefallen, das du einen eigenen Rückgabewerte für deine Engine gemacht hast.
Dagegen gibt es auch nix einzuwenden.
Komisch fand ich nur das ein OK-Werte 0 haben kann und Fehler > 0 sind.
Das ist meiner Meinung gegen jede Logik.
True also Okay sollte IMMER 1 sein und Fehler < 0. Das war immer so und sollte immer so bleiben.
Wenn denkst man wenn man folgendes liest?

If ( GfxDevice->Initialize() )
{

}

Also für mich heist das, wenn Initialisierung ok war.

Will ich aber nur Fehler abfangen dann schreibe ich halt.

If ( !GfxDevice->Initialize() )
{
}


Das war nur eine allgemeine Feststellung von mir und kein Vorwurf, wollte nur mal gerne deine Beweggründe dazuhören.


P.S. nicht böse sein

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

02.06.2005, 16:38

ich finde diesen ansatz eigentlich nicht gegen jede logik und mache es selber auch immer so. es gibt ja meistens nur eine art auf die eine funktion erfolgreich sein kann, aber sicher mehrere fehler die auftreten können.

außerdem is diese form von rückgabewerten durchaus üblich (verwendet z.b. DirectX, WinAPI etc. )

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

02.06.2005, 17:21

Richtig.
Eine Funktion kann auf mehrere Arten fehlschlagen.
Aber Erfolg ist Erfolg, zumindest in den allermeisten Fällen.

4

02.06.2005, 17:23

Hi erstmal,

also ich weis nicht.
Beispiel.
<pseudo code>

if ( CreateWindow(..... ) )
{
// Ich wurde erzeugt!!!!
}

noch ein Beispiel?

if ( Loadlibrary(myDll) )
{
// wurde geladen
}

Also soviel zur WINAPI.

5

02.06.2005, 17:26

@David klar ist ein Erfolg ein Erfolg.

TB_OK = 1
TB_CANCEL = -1
TB_ERROR = -2

if ( !GfxDevice->Init() )
{
// Hier stehen alle Fehler
}

Wo ist das Problem?
Lassen wir es einfach, ist eh egal.

Aber wenn ich mit if (xxx) da erwarte wenn bei einem Wert > 0 einfach was positives!

Mach bei Windows irgend eine Abfrage und dann reden wir weiter ;o)

6

02.06.2005, 17:30

Lassen wir es einfach dabei, jeder macht es wie er es will.
Nicht das mir noch wer böse wird }>

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

7

02.06.2005, 17:41

Die ist klar, das true nicht nur 1, sondern JEDER Wert ungleich Null ist? Dein Beispiel würde folglich nicht funktionieren.

Ciao

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

02.06.2005, 18:32

Zitat von »"BlackDevil"«

Hi erstmal,
<pseudo code>

if ( CreateWindow(..... ) )
{
// Ich wurde erzeugt!!!!
}

noch ein Beispiel?

if ( Loadlibrary(myDll) )
{
// wurde geladen
}
Also soviel zur WINAPI.


also gut, natürlich macht es für mich erstmal keinen sinn, ein fenster zu erzeugen oder eine dll zu laden, ohne das handle darauf irgendwo zu speichern ???
außerdem ist die umstrittene rückgabewert technik bei derartigen funktionen, die ja quasi objekte zurückgeben, mehr als nur sinnbefreit. leider kommst du ohne ein GetLastError aber auch net drauf was genau der fehler war :P

in der WinAPI gibt es zugegebenermaßen nicht soo viele beispiele derartiger rückgabewerte, aber schau dir mal ein paar dx funktionen an (CreateTexture, CreateVertexBuffer, CreateIndexBuffer, Present, CreateDevice, etc. )

Anonymous

unregistriert

9

02.06.2005, 19:38

Deine genannten Beispiele gehen nur deshalb, weil du hier im Rückgabewert einen Zeiger hast und der ist bei einem Fehler NULL, aber genauere Informationen über den Fehler hast du so nicht.

Und es gibt bei APIs mit Fehlercodes wie sie Scherfgen verwendet so gut wie immer Makros à la SUCCESS und FAILED

Werbeanzeige