JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=ddffbcdf401beb9bae3fa42b8dc36cdeMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Sinnvolle Sachen fürs Dev.
Gehe zu Seite 1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 23.03.2005, 21:09    Titel: Sinnvolle Sachen fürs Dev. Antworten mit Zitat

Hi,

hier werden ja oft diverse Dinge gefragt die eigentlich "Alltäglich" sind Smile

Drum dachte ich mir, ich eröffne mal einen Thread wo jeder paar Sinnvolle Sachen (kleinere Funktionen, links, infopapers oder sonst was) posten kann Smile

Falls es Code gibt können die member den ja verbessern falls es was zu verbessern gibt Smile

Naja ich fang mal an:
Viele benutzen sowas:
CPP:
#define SAFE_RELEASE(x) if((x) != NULL){x->Release(); x=NULL;}
doch damit kann man natürlich viele Fehler machen wenn man z.B. kein COM-Objekt übergibt das von IUnknown abgeleitet wurde.

Deshalb hier eine kleine Templatelösung die man auch für andere sachen erweitern kann dank Templates Very Happy:
CPP:
template<typename T> inline void safeRelease (T*& unknown);

template<> inline void safeRelease<::IUnknown> (::IUnknown*& unknown)
{
    if (unknown != NULL)
    {
        unknown->Release();
        unknown = NULL;
    }
}


So und nun ihr Smile
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 23.03.2005, 21:14    Titel: Antworten mit Zitat

Für alle die es noch nicht wissen: Auch wenn Makros meist "doof" sind gibt es doch einige Einsatzbereiche die IMHO ohne gar nicht gehen.
Was man zum Beispiel sehr gut für ein Log Buch gebrauchen kann, ist folgendes Makro:
CPP:
#define DATAL(x) << x << " in " << __FILE__ << " Line: " << __LINE__


Wenn man nun diese Makro aufruft, etwa in einem LogBuch weiß man immer ganz genau, wos stand, was manchmal sehr nützlich sien kann.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 23.03.2005, 22:36    Titel: Antworten mit Zitat

Habe noch etwas, was für die VC++6.0 User sicherlich interessant sein könnte:

VC++6.0 hat einen kleinen Fehler in Sachen scope für variabelndefinitionen.

Folgender Code ist ein voll zulässiger C++ Code, aber er wird nicht Compiliert auf dem VC++6.0
CPP:
int main (void)
{
        // Schleife 1
    for (unsigned long i=0; i<10; ++i)
        foo ();

        // Schleife 2
    for (unsigned long i=0; i<10; ++i)
        foobar ();

    return 0;
}

VC++6.0 glaubt jetzt in der 2. Schleife das 'i' schon definiert ist, obwohl es laut Standard nur für die 1. Schleife definiert wurde

Diesen Bug kann man jedoch ganz leicht beheben mit dem PräProzessor:
CPP:
#define for if(false) else for


Nun würde sich auch folgender Schleifenaufbau compilieren lassen:
CPP:
#define for if(false) else for

int main (void)
{
        // Schleife 1
    for (unsigned long i=0; i<10; ++i)
        foo ();

        // Schleife 2
    for (unsigned long i=0; i<10; ++i)
        foobar ();

    return 0;
}

_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nigs
Super JLI'ler



Anmeldedatum: 19.12.2002
Beiträge: 359

Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 02:47    Titel: Antworten mit Zitat

Patrick hat Folgendes geschrieben:
Habe noch etwas, was für die VC++6.0 User sicherlich interessant sein könnte:

VC++6.0 hat einen kleinen Fehler in Sachen scope für variabelndefinitionen.

Folgender Code ist ein voll zulässiger C++ Code, aber er wird nicht Compiliert auf dem VC++6.0
CPP:
int main (void)
{
        // Schleife 1
    for (unsigned long i=0; i<10; ++i)
        foo ();

        // Schleife 2
    for (unsigned long i=0; i<10; ++i)
        foobar ();

    return 0;
}

VC++6.0 glaubt jetzt in der 2. Schleife das 'i' schon definiert ist, obwohl es laut Standard nur für die 1. Schleife definiert wurde

Diesen Bug kann man jedoch ganz leicht beheben mit dem PräProzessor:
CPP:
#define for if(false) else for


Nun würde sich auch folgender Schleifenaufbau compilieren lassen:
CPP:
#define for if(false) else for

int main (void)
{
        // Schleife 1
    for (unsigned long i=0; i<10; ++i)
        foo ();

        // Schleife 2
    for (unsigned long i=0; i<10; ++i)
        foobar ();

    return 0;
}


Hey cool, das Problem hatte ich auch schon, aber konnte mir nicht erklären woher es kam, denn der Gültigkeitsbereich der Variablen ist nur innerhalb der geschweiften Klammern.....
Thx, werds mir merkn......
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 10:17    Titel: Antworten mit Zitat

aber in der for Schleife sind die Variablen ja eben net in ner geschweiften Klamemr sondern in einer runden...
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 11:26    Titel: Antworten mit Zitat

Gut, dass beide Varianten bei VC .NET funktionieren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 11:45    Titel: Antworten mit Zitat

Produziert dieses
CPP:
#define for if(false) else for
nicht zusätzlichen Code, der das Kompilat länger macht? wenn if(false) wegoptimiert wird sind wir ja wieder beim Scope-Problem... Eventuell würde ich auch if(0) vorschlagen, weil false nicht unbedingt definiert ist - oder?
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 11:53    Titel: Antworten mit Zitat

false, true, bool sind buildin-typen in einem C++ Compiler seit der 1. Generation. Da gibt es nichts dran zu rütteln, das ist so.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 12:08    Titel: Antworten mit Zitat

Wenn ich jetzt das i nach der Schleife noch nehmen will, weil ich den Wert brauche geht das nicht mehr?
_________________
"Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 12:18    Titel: Antworten mit Zitat

laut C99 Standard ist dies nicht erlaubt.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 16:24    Titel: Antworten mit Zitat

Ah so, ich brauchs ja eh net Very Happy
hattes dafür ->da es bei der std::list keinen []-Operator gibt:
CPP:
long ID;
cin>>ID;
std::list<WTF>::iterator it=List.begin();
for(long i=0; i<List.capacity(); i++)
{
     if(i==ID)
         break;
     it++;
}
// Hier hat dann it das gewünschte Element


Naja, besser als nichts... Wink
_________________
"Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 16:33    Titel: Antworten mit Zitat

Naja std::list wurd auch nicht für einen operator[] entwickelt, dafür ist der vector da Wink Die beiden unterscheiden sich schon in ihrem Sinn Wink
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 16:35    Titel: Antworten mit Zitat

Aber wenn ich nu ma std::list nehm will ich auch einen [] haben! Rambo
_________________
"Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 16:43    Titel: Antworten mit Zitat

Naja, der Sinn einer Liste ist es wie bei einem Zug, das man nur vorne den Wagon abhängen kann oder ganz hinten. Ne list ist so wie ein Stack der von oben und unten bearbeitet werden kann Smile

Für die Sachen für zwischen drin ist der vector da Smile

Frag mal Deinen Mathelehrer zum Thema: "Unterschiede zwischen Listen und Vectoren", denn die Beiden kommen ja aus der Mathematik Smile
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 16:50    Titel: Antworten mit Zitat

kann man nicht so verwegen sein, und einfach ne Klasse von der list ableiten, in der man den implementiert? Ich meine, man muss dafür ja bloß in ner Schleife die liste durchlaufen, und das Element zurückgeben.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2, 3  Weiter
Seite 1 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum